2012-05-25 43 views

Trả lời

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

điều này thật tuyệt ... –

+0

Có cách nào chỉ hoạt động khi chiều rộng đã thay đổi VÀ khi giá trị pixel nhỏ hơn? Ví dụ. nếu ($ (cửa sổ) .width() <500) kết hợp với các bên trên? – Dan382

+1

Mã trên hoạt động, nhưng hiệu suất của nó là tối ưu. Đối tượng cửa sổ jQuery được tạo nhiều lần mặc dù nó có thể được thực hiện chỉ một lần. Ngoài ra chiều rộng mới của cửa sổ được tính toán vô nghĩa nhiều lần. – Anton

16

bạn có thể phát hiện cả hai sự kiện và chỉ cần thực thi mã khi đó là một sự thay đổi width:

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

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

Và bạn có thể muốn kiểm tra kiện debouncing.

Việc ghi nợ thực thi một hàm không được gọi lại cho đến khi một khoảng thời gian nhất định trôi qua mà không được gọi. . Như trong "thực hiện chức năng này chỉ khi 100 mili giây đã trôi qua mà không có nó được gọi


Read more:


1

Người ta cũng có thể sử dụng jQuery plugin nhỏ cho việc này: https://github.com/adjohnson916/jquery-resize-dimension

Giữ mã riêng của bạn dễ đọc hơn:

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

hoặc chỉ:

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

Mặc dù đã có một vài của các câu trả lời với các giải pháp làm việc, loại nhiệm vụ này là hiệu năng quan trọng (sự kiện thay đổi kích thước cửa sổ được kích hoạt nhiều lần trong khi người dùng đang thay đổi kích thước cửa sổ) vì vậy tôi đề nghị bạn chăm sóc rformance. Xin vui lòng, có một cái nhìn vào mã tối ưu hóa dưới đây:

/* 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; 
    } 
}); 

Thêm vào đó, bạn có thể quan tâm kiểm tra Debounce/Throttle mẫu - họ cải thiện hiệu suất vô cùng trong những trường hợp như thế này.

Các vấn đề liên quan