কীভাবে জাভাস্ক্রিপ্টে উইন্ডো রাইজ ইভেন্টটি ট্রিগার করবেন?


327

আমি উইন্ডো আকারে একটি ট্রিগার নিবন্ধিত করেছি। আমি কীভাবে ইভেন্টটি কল করার জন্য ট্রিগার করতে পারি তা জানতে চাই। উদাহরণস্বরূপ, যখন কোনও ডিভ লুকান, আমি চাই আমার ট্রিগার ফাংশনটি কল করা হোক।

আমি window.resizeTo()ফাংশন ট্রিগার করতে পারে পাওয়া , কিন্তু অন্য কোন সমাধান আছে?

উত্তর:


381

যেখানে সম্ভব, আমি কোনও অনুষ্ঠান প্রেরণের চেয়ে ফাংশনটিতে কল করতে পছন্দ করি। আপনি যে কোডটি চালাতে চান তার উপর যদি নিয়ন্ত্রণ থাকে তবে এটি ভাল কাজ করে তবে কোডগুলির মালিকানা নেই এমন ক্ষেত্রে নীচে দেখুন।

window.onresize = doALoadOfStuff;

function doALoadOfStuff() {
    //do a load of stuff
}

এই উদাহরণে, আপনি doALoadOfStuffকোনও অনুষ্ঠান প্রেরণ না করেই ফাংশনটি কল করতে পারেন ।

আপনার আধুনিক ব্রাউজারগুলিতে, আপনি ইভেন্টটি ব্যবহার করে ট্রিগার করতে পারেন :

window.dispatchEvent(new Event('resize'));

এটি ইন্টারনেট এক্সপ্লোরারে কাজ করে না, যেখানে আপনাকে লংহ্যান্ড করতে হবে:

var resizeEvent = window.document.createEvent('UIEvents'); 
resizeEvent.initUIEvent('resize', true, false, window, 0); 
window.dispatchEvent(resizeEvent);

jQuery এর triggerপদ্ধতি রয়েছে , যা এ জাতীয়ভাবে কাজ করে:

$(window).trigger('resize');

এবং সতর্কতা আছে:

যদিও .trigger () কোনও ইভেন্ট অ্যাক্টিভেশনকে সিমুলেট করে, সংশ্লেষিত ইভেন্ট অবজেক্টের সাথে সম্পূর্ণ, এটি কোনও প্রাকৃতিকভাবে ঘটে যাওয়া ইভেন্টটির পুরোপুরি প্রতিলিপি দেয় না।

আপনি নির্দিষ্ট উপাদানগুলিতে ইভেন্টগুলিও অনুকরণ করতে পারেন ...

function simulateClick(id) {
  var event = new MouseEvent('click', {
    'view': window,
    'bubbles': true,
    'cancelable': true
  });

  var elem = document.getElementById(id); 

  return elem.dispatchEvent(event);
}

6
আপনার বেনামে ফাংশন অপ্রয়োজনীয়। window.onresize = doALoadOfStuff; এছাড়াও, এটি প্রশ্নের উত্তর দেয় না, নীচে পিনচনের উত্তরটি সঠিক উত্তর।
ডেনিস প্লুসিনিক

42
করতে গুগল R এর: @ avetisk এর উত্তর কটাক্ষপাত আছে।
ফ্যাবিয়ান লাউয়ার

1
ডিকুয়েল করা ভাল ধারণা, তবে আমার / এই ক্ষেত্রে এটি কার্যকর হয় না। কেবল আকার পরিবর্তন পদ্ধতিতে কল করা কার্যকর হয় না কারণ উইন্ডোর আকার পরিবর্তন করতে না পারলে বিভিন্ন ডিভ / পাত্রে সঠিক উচ্চতা সেট থাকে না।
পান্ডুড

@ পান্ডাওড - তবে আমার শেষ উদাহরণটি আপনার ক্ষেত্রে আরও ভাল।
ফেন্টন

আপনাকে ধন্যবাদ @ ব্যবহারকারী 75525
বন্ডস্মিথ

676
window.dispatchEvent(new Event('resize'));

11
মনে হচ্ছে ক্রোম, এফএফ, সাফারি দিয়ে কাজ করছে তবে তা নয়: আইই!
ডেভেম এম

14
jQuery এর triggerআসলে নেটিভ "আকার পরিবর্তন" ইভেন্টটি ট্রিগার করে না। এটি কেবল ইভেন্ট শ্রোতাদের ট্রিগার করে যা jQuery ব্যবহার করে যুক্ত করা হয়েছে। আমার ক্ষেত্রে, একটি তৃতীয় পক্ষের লাইব্রেরি সরাসরি নেটিভ "রিসাইজ" ইভেন্টটি শুনছিল এবং এটিই আমার জন্য কার্যকর সমাধান।
চৌই ২

2
দুর্দান্ত এবং সহজ সমাধান। যদিও, আমি মনে করি আপনার IE সামঞ্জস্যের জন্য কিছু কোড যুক্ত করা উচিত (যতদূর আমি দেখতে পাচ্ছি, IE এর জন্য আমাদের ব্যবহার করতে হবে window.fireEvent)
ভিক্টর

35
এটি আমার জন্য সমস্ত ডিভাইসে কাজ করে না। আমাকে ইভেন্টটি এইভাবে ট্রিগার করতে হয়েছিল: var evt = document.createEvent ('UIEvents'); evt.initUIEvent ('আকার পরিবর্তন', সত্য, মিথ্যা, উইন্ডো, 0); window.dispatchEvent (evt);
মনফ্রেড

19
এটি আমার
আই

156

JQuery এর সাহায্যে, আপনি ট্রিগার কল করার চেষ্টা করতে পারেন :

$(window).trigger('resize');

3
এর জন্য ব্যবহারের ক্ষেত্রে হ'ল যখন কোনও জিক্যুরি প্লাগইন উইন্ডো রাইজ ইভেন্টগুলিকে প্রতিক্রিয়াশীল হিসাবে ব্যবহার করে তবে আপনার একটি ধসে পড়া সাইডবার থাকে। প্লাগইনটির ধারকটি পুনরায় আকার দেয়, তবে উইন্ডোটি দেয় না।
ইশারউড

4
জ্যাকুয়ারির দরকার নেই তবে আমি জ্যাকুয়ারি সলিউশনটি পছন্দ করি কারণ আমার পণ্যটি জ্যাকুয়ারি ব্যাপকভাবে ব্যবহার করে।
শ্রী

ওয়ার্ডপ্রেস পৃষ্ঠাটি লোড হওয়ার পরে এটি আকার পরিবর্তন করতে কোথায় যুক্ত হবে?
SAHM

এটি Chrome সর্বশেষ আমার জন্য কাজ করছে না, এই উত্তর আছে: stackoverflow.com/a/22638332/1296209
webaholik

1
এটি আমি প্রথমে চেষ্টা করেছিলাম - এটি কাজ করে না, তবে window.dispatchEvent(new Event('resize'));করেছে
user2682863

54

একটি খাঁটি জেএস যা আইইতেও কাজ করে ( @ ম্যানফ্রেড মন্তব্য থেকে )

var evt = window.document.createEvent('UIEvents'); 
evt.initUIEvent('resize', true, false, window, 0); 
window.dispatchEvent(evt);

বা কৌণিক জন্য:

$timeout(function() {
    var evt = $window.document.createEvent('UIEvents'); 
    evt.initUIEvent('resize', true, false, $window, 0); 
    $window.dispatchEvent(evt);
});

4
দুর্ভাগ্যবশত ডকুমেন্টেশন UIEvent.initUIEvent () বলেছেন createEvent ডক্স বলে "অনেক ধরনের initCustomEvent যেমন createEvent সঙ্গে ব্যবহার পদ্ধতি,, অবচিত করছে। ব্যবহারের ঘটনা কনস্ট্রাকটর পরিবর্তে।" এই পৃষ্ঠাটি ইউআই ইভেন্টগুলির জন্য আশাব্যঞ্জক দেখাচ্ছে। Do not use this method anymore as it is deprecated.
রেডিং ট্যাডপোল

9
সত্য, তবে IE11 new Event()পদ্ধতিটি সমর্থন করে না । আমি মনে করি পুরানো ব্রাউজারগুলির বিরুদ্ধে হ্যাক হিসাবে আপনি এরকম কিছু করতে পারেন if (Event.prototype.initEvent) { /* deprecated method */ } else { /* current method */ }। যেখানে বর্তমান পদ্ধতিটি অ্যাভেটিস্কের উত্তর
ব্রায়ানস

@ পমবার সমাধানের জন্য ধন্যবাদ, আসলে আমি আমার চার্টটিকে পুনরায় আকার দেওয়ার জন্য উইন্ডো পুনরায় আকার দেওয়ার জন্য কাস্টম ইভেন্টটি ট্রিগার করার চেষ্টা করছিলাম ... আপনার সমাধানটি আমার দিনটি বাঁচান
দিনেশ গোপাল চাঁদ

49

সমস্ত ব্রাউজারগুলি কভার করার জন্য পম্পার এবং অ্যাভিটিস্কের উত্তরগুলির সংমিশ্রণ এবং সতর্কতা সৃষ্টি না করা:

if (typeof(Event) === 'function') {
  // modern browsers
  window.dispatchEvent(new Event('resize'));
} else {
  // for IE and other old browsers
  // causes deprecation warning on modern browsers
  var evt = window.document.createEvent('UIEvents'); 
  evt.initUIEvent('resize', true, false, window, 0); 
  window.dispatchEvent(evt);
}

1
JQuery ব্যবহার না করে ব্রাউজারগুলিতে এটি করার একটি ভাল উপায়।
কেজি x

কেন এটি শীর্ষ উত্তর নয় তা জানেন না ...... এটি "উভয় বা" গৃহীত উত্তরগুলির চেয়ে ভাল ....
স্পিলাই

14

উপরের যে কোনও সমাধানের সাথে আমি এটি কাজ করতে সক্ষম হয়ে উঠিনি। আমি একবার ইভেন্টটিকে jQuery এর সাথে আবদ্ধ করে নিলাম তখন এটি নীচের মতো দুর্দান্ত কাজ করেছে:

$(window).bind('resize', function () {
    resizeElements();
}).trigger('resize');

ক্রোমে আজ কাজ করে।
ওয়েবাহোলিক

9

মাত্র

$(window).resize();

আমি যা ব্যবহার করি তা যদি না হয় ... যদি না আপনি যা চাইছেন তা ভুল বুঝে না।


3
এবং আপনার কাছে jQuery থাকলেও এটি কেবল ইভেন্টগুলি ট্রিগার করে যা jQuery এর সাথে আবদ্ধ ছিল।
অ্যাডামডপোর্ট

0

আরএক্সজেএস-এর সাথে প্রতিক্রিয়া

কৌণিক কিছু বলুন

size$: Observable<number> = fromEvent(window, 'resize').pipe(
            debounceTime(250),
            throttleTime(300),
            mergeMap(() => of(document.body.clientHeight)),
            distinctUntilChanged(),
            startWith(document.body.clientHeight),
          );

যদি ম্যানুয়াল সাবস্ক্রিপশন পছন্দ হয় (বা কৌনিক নয়)

this.size$.subscribe((g) => {
      console.log('clientHeight', g);
    })

যেহেতু আমার অন্তর্নিহিত সূচনার মানটি ভুল হতে পারে (সংশোধনের জন্য প্রেরণ)

window.dispatchEvent(new Event('resize'));

কৌণিক বলতে (আমি পারতাম ..)

<div class="iframe-container"  [style.height.px]="size$ | async" >..

0

আমি বিশ্বাস করি এটি সমস্ত ব্রাউজারের জন্য কাজ করা উচিত:

var event;
if (typeof (Event) === 'function') {
    event = new Event('resize');
} else { /*IE*/
    event = document.createEvent('Event');
    event.initEvent('resize', true, true);
}
window.dispatchEvent(event);

ক্রোম এবং এফএফ এ দুর্দান্ত কাজ করে, তবে আইই 11 এ কাজ করেনি
কলিন্স

@ কলিনস - আপডেটের জন্য ধন্যবাদ, ভেবেছিলাম আমি আইই 11 এ এটি যাচাই করেছি ... আমি এটি আপডেট করতে কিছুক্ষণ পরে চেষ্টা করব, প্রতিক্রিয়াটির জন্য ধন্যবাদ
ওয়েবাহোলিক

0

আপনি এই লাইব্রেরি দিয়ে এটি করতে পারেন। https://github.com/itmor/events-js

const events = new Events();

events.add({  
  blockIsHidden: () =>  {
    if ($('div').css('display') === 'none') return true;
  }
});

function printText () {
  console.log('The block has become hidden!');
}

events.on('blockIsHidden', printText);

-3

window.resizeBy()উইন্ডোর অনারাইজ ইভেন্টটি ট্রিগার করবে। এটি জাভাস্ক্রিপ্ট বা ভিবিএস স্ক্রিপ্ট উভয় ক্ষেত্রেই কাজ করে ।

window.resizeBy(xDelta, yDelta)window.resizeBy(-200, -200)পৃষ্ঠা 200px দ্বারা 200px সঙ্কুচিত করতে বলা হয়।


2
কেন এটি চিহ্নিত করা হয়েছে? এটা কি ভুল? এটি কি ব্রাউজার নির্ভর?
পিটার ওন

2
এটি কোনও ব্রাউজারে কাজ করে না : ক্রোম, ফায়ারফক্স, আইই, ফায়ারফক্স পরীক্ষিত।
ফ্রেগান্ট

1
ফায়ারফক্স 7+ এবং সম্ভবত অন্যান্য আধুনিক ব্রাউজারগুলি বেশিরভাগ ক্ষেত্রে এই পদ্ধতিটিকে কল করার অনুমতি দেয় না। তদ্ব্যতীত, ইভেন্টটি ট্রিগার করতে উইন্ডোটির প্রকৃত আকার পরিবর্তন করা বাঞ্ছনীয় নয়।
ব্যবহারকারী 247702

রিসাইজবি () এবং রিসাইজটো () উভয়ই সর্বশেষতম স্থিতিশীল ক্রোম ভারতে দুর্দান্ত কাজ করছে। 76.0
ভানাগস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.