2010-06-08 34 views
117

Có cách nào với jQuery hoặc JavaScript để kích hoạt một chức năng khi người dùng kết thúc để thay đổi kích thước cửa sổ trình duyệt không?Phát hiện khi cửa sổ được thay đổi kích thước bằng JavaScript?

Trong các điều khoản khác:

  1. Tôi có thể phát hiện chuột lên sự kiện khi người dùng được thay đổi kích thước cửa sổ trình duyệt? Nếu không:
  2. Tôi có thể phát hiện khi hoạt động thay đổi kích thước cửa sổ hoàn tất không?

tôi hiện chỉ có thể kích hoạt một sự kiện khi người dùng bắt đầu thay đổi kích thước cửa sổ với jQuery

+3

có một jQuery và phi jQuery giải pháp ở đây: https://github.com/louisremi/jque ry-smartresize – bradt

+0

giải pháp tuyệt vời cho các sự kiện debuff-smartresize debounced! – tetri

Trả lời

223

Bạn có thể sử dụng .resize() để có được mỗi khi chiều rộng/chiều cao thực sự thay đổi, như thế này:

$(window).resize(function() { 
    //resize just happened, pixels changed 
}); 

You can view a working demo here, phải có giá trị chiều cao/chiều rộng mới và cập nhật chúng trong trang để bạn xem. Hãy nhớ rằng sự kiện này không thực sự là bắt đầu hoặc kết thúc, nó chỉ "xảy ra" khi thay đổi kích thước xảy ra ... không có gì để nói một điều khác sẽ không xảy ra.


Edit: By bình luận có vẻ như bạn muốn một cái gì đó giống như một sự kiện "trên-end", giải pháp mà bạn tìm thấy thực hiện điều này, với một vài trường hợp ngoại lệ (bạn không thể phân biệt giữa một con chuột-up và tạm dừng theo cách của trình duyệt chéo, tương tự cho một kết thúc và một số tạm dừng). Bạn có thể tạo trường hợp tuy nhiên, để làm cho nó một chút bụi, như thế này:

$(window).resize(function() { 
    if(this.resizeTO) clearTimeout(this.resizeTO); 
    this.resizeTO = setTimeout(function() { 
     $(this).trigger('resizeEnd'); 
    }, 500); 
}); 

Bạn có thể có điều này là một tập tin cơ sở ở đâu đó, bất cứ điều gì bạn muốn làm ... sau đó bạn có thể liên kết với đó mới resizeEnd trường hợp bạn đang hiển thị, như thế này:

$(window).bind('resizeEnd', function() { 
    //do something, window hasn't changed size in 500ms 
}); 

You can see a working demo of this approach here

+1

Tùy thuộc vào trình duyệt, khi nào và có bao nhiêu sự kiện thay đổi kích thước được kích hoạt: http://www.quirksmode.org/dom/events/resize.html –

+0

@chris_l: Tôi không chắc chắn trang đó chính xác như thế nào nữa .. .open lên bản demo tôi đăng trong Firefox mới nhất, nó sẽ kích hoạt nó mỗi khi kích thước thay đổi ở đây. Tôi không có Opera để kiểm tra, nó có thể vẫn khác nhau, nhưng chúng ít nhất là phù hợp hơn so với quirksmode gợi ý, tôi sẽ gửi cho họ một lưu ý cần cập nhật này. –

+0

@Nick: Vâng, trang quirksmode chỉ bao gồm FF cho đến 3.1b2 - nhưng loại chương trình đó, nó phụ thuộc vào trình duyệt ... –

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