2013-11-13 3 views
1

Я пытаюсь определить размер элемента с помощью jquery resize plugin (http://benalman.com/projects/jquery-resize-plugin/) на jquery 1.10.2.jQuery detect element resize

$("#element").resize(function(){ 
    console.log("resize"); 
}); 

Я сделал тестирование на Firefox 25 и я получаю эту ошибку:

Error: TypeError: r is undefined 
Source File: jquery.ba-resize.min.js 
Line: 9 

Как я могу решить эту проблему? Есть ли альтернативный способ/плагин для этого?

Спасибо.

+0

Просто удалите этот плагин! , и вы сделаете с ним – l2aelba

ответ

-2

Удалите этот плагин, jQuery, выполненный с ним самостоятельно.

var element = $('#element'); 
var current_size = element.width()+'x'+element.height(); 
element.resize(function(){ 
    var this_size = $(this).width()+'x'+$(this).height(); 
    if(current_size!==this_size){ 
     console.log('changed'); 
     current_size = this_size; 
    } 
}); 

PS: Не проверить

+0

Протестировано. Сам jQuery работает только с $ (window) – user1995781

+0

, возможно, вам нужно использовать 'Mousedown()', 'Mouseup()'? @ user1995781 – l2aelba

+0

Я не понимаю этого ответа. – eremzeit

3

Вам нужен датчик изменения размера, который поставляется вместе с CSS-элементов-запросов https://github.com/marcj/css-element-queries.

new ResizeSensor($('.elements'), function(){ 
    console.log('resize') 
}); 

JQuery-х .resize работает только на window объекта, поскольку только window имеет событие onresize. У всех остальных элементов нет и, следовательно, для этого вам нужна полипол. Я видел много других плагинов jQuery, которые позволяют прослушивать изменения размеров всех типов элементов, но позаботьтесь: они невероятно медленны, поскольку они используют setTimeout() или интервал, чтобы проверить его изменение размеров вместо настройки реального датчика изменения размера как тот, который вы можете найти в ссылке выше.

+0

Я не понимаю, как вы можете слушать изменение размера без 'setTimeout()' или 'requestAnimationFrame()', на самом деле ваш код, похоже, использует его ... Что я пропустил? https://github.com/marcj/css-element-queries/blob/93626d81fd9c0f14adbe1bcf82a06e7beaaafbdb/src/ResizeSensor.js#L13 –

+1

Этот анимационный фрейм или setTimeout для чего-то другого. Он используется для сглаживания всех вызовов обратного вызова. Обычно браузер может выполнять более быструю визуализацию, чем 60 кадров в секунду, но если вы подключили прослушиватель resize к анимированному div, вы получите массу вызываемых событий. Чтобы уменьшить эти события до максимального 1 обратного вызова на фрейм, вы можете сэкономить время процессора. Это не имеет никакого отношения к обнаружению медленного изменения размера, а скорее наоборот: оно помогает замедлить очень быстрое изменение размера с помощью взлома событий onscroll. –

+0

О, это имеет смысл. :) Спасибо за то, что вы поделились своим взломом, похоже, что интернет полагается на него. –

0

Использование Clay.js (https://github.com/zzarcon/clay) это довольно просто, чтобы обнаружить изменения на размер элемента:

var el = new Clay('.element'); 

el.on('resize', function(size) { 
    console.log(size.height, size.width); 
}); 
0

DIV не срабатывает событие изменения размера, так что вы не будете в состоянии сделать то, что вы имеете но вы можете посмотреть на свойства DOM.

Если вы действительно работаете с чем-то вроде изменяемых размеров, и это единственный способ изменить размер div, тогда ваш плагин изменения размера, вероятно, будет реализовывать собственный обратный вызов.