2012-05-25 17 views
27

मैं विंडो पुन: आकार की घटनाओं का पता लगाने के लिए .resize() फ़ंक्शन का उपयोग कर रहा हूं, लेकिन यह ऊंचाई और चौड़ाई दोनों परिवर्तनों का पता लगाता है।jQuery - एक विंडो चौड़ाई परिवर्तन का पता लगाएं लेकिन ऊंचाई परिवर्तन नहीं

का पता लगाने का कोई तरीका है बस एक चौड़ाई परिवर्तन और ऊंचाई परिवर्तन नहीं है?

उत्तर

50
var width = $(window).width(); 
$(window).on('resize', function(){ 
    if($(this).width() != width){ 
     width = $(this).width(); 
     console.log(width); 
    } 
}); 
+0

यह बहुत अच्छा है ... –

+0

क्या केवल तभी कार्य करने का कोई तरीका है जब चौड़ाई बदल गई हो और जब पिक्सेल मान से कम हो? जैसे अगर ($ (विंडो)। विड्थ() <500) उपर्युक्त के साथ संयुक्त है? – Dan382

+1

उपरोक्त कोड काम करता है, लेकिन इसका प्रदर्शन उपोष्णकटिबंधीय है। JQuery विंडो ऑब्जेक्ट कई बार बनाया गया है, भले ही यह केवल एक बार किया जा सके। इसके अलावा खिड़कियों की नई चौड़ाई निर्विवाद रूप से कई बार गणना की जाती है। – Anton

16

तुम दोनों घटनाओं का पता लगाने और जब यह एक चौड़ाई परिवर्तन है सिर्फ कोड निष्पादित करें:

var lastWidth = $(window).width(); 

$(window).resize(function(){ 
    if($(window).width()!=lastWidth){ 
     //execute code here. 
     lastWidth = $(window).width(); 
    } 
})   

और तुम घटना debouncing जांच करना चाह सकते।

बहस लागू करता है कि एक फ़ंक्शन को तब तक नहीं बुलाया जाता जब तक कि इसे बिना किसी कॉल के पास किया जाता है। । के रूप में "इस समारोह को केवल तभी 100 मिलीसेकंड के बिना यह कहा जा रहा है बीत चुके हैं पर अमल


और अधिक पढ़ें:


1

एक भी इस बात के लिए इस छोटे से jQuery प्लगइन का उपयोग कर सकते हैं:

ResizeDimension.bind('width'); 
$(window).on('resize-width', function() { 
    console.log('resize-width event'); 
}); 

या बस: https://github.com/adjohnson916/jquery-resize-dimension

अपने खुद के कोड अधिक पठनीय रहता

$(window).resizeDimension('width', function() { 
    console.log('resize-width event'); 
}); 
4

वहाँ पहले से ही एक जोड़े हैं भले ही कामकाजी समाधानों के उत्तर के साथ, इस तरह का कार्य महत्वपूर्ण है (खिड़की का आकार बदलना घटना कई बार ट्रिगर होती है जबकि उपयोगकर्ता खिड़की का आकार बदल रहा है) इसलिए मैं दृढ़ता से सुझाव देता हूं कि आप पे का ख्याल रखें rformance। कृपया नीचे दिए गए अनुकूलित कोड पर एक नजर है:

/* Do not waste time by creating jQuery object from window multiple times. 
* Do it just once and store it in a variable. */ 
var $window = $(window); 
var lastWindowWidth = $window.width(); 

$window.resize(function() { 
    /* Do not calculate the new window width twice. 
    * Do it just once and store it in a variable. */ 
    var windowWidth = $window.width(); 

    /* Use !== operator instead of !=. */ 
    if (lastWindowWidth !== windowWidth) { 
     // EXECUTE YOUR CODE HERE 
     lastWindowWidth = windowWidth; 
    } 
}); 

इसके अलावा, आप Debounce/Throttle पैटर्न की जाँच में रुचि हो सकती है - वे इस तरह के मामलों में काफी प्रदर्शन में सुधार।

संबंधित मुद्दे