Có thể tạo trình xử lý sự kiện trong jQuery có thể bị ràng buộc với bất kỳ thay đổi kiểu nào không? Ví dụ: nếu tôi muốn "làm" điều gì đó khi yếu tố thay đổi thứ nguyên hoặc bất kỳ thay đổi nào khác trong thuộc tính kiểu tôi có thể làm:Có thể nghe sự kiện "thay đổi kiểu" không?
$('div').bind('style', function() {
console.log($(this).css('height'));
});
$('div').height(100); // yields '100'
Nó thực sự hữu ích.
Bất kỳ ý tưởng nào?
CẬP NHẬT
Xin lỗi vì trả lời này bản thân mình, nhưng tôi đã viết một giải pháp gọn gàng mà có thể phù hợp với người khác:
(function() {
var ev = new $.Event('style'),
orig = $.fn.css;
$.fn.css = function() {
$(this).trigger(ev);
return orig.apply(this, arguments);
}
})();
này sẽ tạm thời ghi đè phương pháp prototype.css nội bộ và xác định lại nó với một kích hoạt ở cuối. Vì vậy, nó hoạt động như thế này:
$('p').bind('style', function(e) {
console.log($(this).attr('style'));
});
$('p').width(100);
$('p').css('color','red');
yup, giải pháp tốt đẹp, nhưng trong một ứng dụng thực tế, tôi nghi ngờ sức mạnh này mất rất nhiều tài nguyên và thậm chí làm cho trình duyệt có vẻ chậm để theo kịp tương tác của người dùng. Tôi rất muốn biết nếu đó là trường hợp hay không. – pixeline
@pixeline: Tôi không thể thấy rằng nó sẽ chậm hơn nhiều. jQuery vẫn gọi các nguyên mẫu css anyway, tôi chỉ cần thêm một kích hoạt cho nó. Vì vậy, về cơ bản nó chỉ là một cuộc gọi phương thức bổ sung. – David
Tôi hiểu rằng: có vẻ như trong luồng người dùng tương tác với một ứng dụng, css() được gọi là rất nhiều thời gian. Tùy thuộc vào những gì bạn làm với kích hoạt đó (nếu nó chỉ là một bảng điều khiển đăng nhập, tôi đoán bạn là an toàn tất nhiên), điều này có thể tạo ra các vấn đề. Tôi chỉ tự hỏi thôi. Nó cũng phụ thuộc vào ứng dụng. Cá nhân tôi có xu hướng thực hiện rất nhiều phản hồi trực quan trong nội dung của tôi. – pixeline