кроссбраузерный элемент onresize (HTML / JS)

#html #javascript-events

#javascript #HTML #dom-события

Вопрос:

Я знаю, что IE поддерживает onresize событие для любого элемента, в то время как FireFox поддерживает его только для window объекта.

Поскольку мне нужна эта функциональность для любого современного браузера, в настоящее время я использую (довольно быстрый) интервальный таймер, который непрерывно проверяет clientWidth / clientHeight элемента для эмуляции onresize . Конечно, это очень неэффективно, и я хотел бы знать, существует ли кроссбраузерный способ, который делает это. Или, альтернативно, другие методы, которые работают в Firefox / WebKit / IE, так что метод timer-method можно использовать в качестве запасного варианта для остальных браузеров.

Нацеливание на обычный JavaScript, вместо jQuery / Prototype и т.д.

Ответ №1:

Если вы не хотите использовать jQuery, вы должны проверить, что браузер отправляет вашему скрипту, поэтому:

 if(!element.onresize != null) element.onresize  = event;
if(!element.onresizeAnotherHandler != null) element.onresizeAnotherHandler  = event;
  

Я не знаю, так ли это просто, но это общая концепция.

РЕДАКТИРОВАТЬ: Похоже, что для Firefox нет обработчика событий. Но есть хитрость:

  • Если вы меняете ширину в своем JS, просто создайте обновление функции

     function update(var nx, var ny){
        // do something with nx and ny
    }
      
  • Если вы добавили дескриптор изменения размера с помощью CSS, сделайте это с помощью JavaScript

  • Если вы используете что-то вроде 80% в своем CSS, тогда обработайте window.onresize:

     function resize(){
        alert(document.getElementById("test").style.width);
    }
      

    window.onresize = изменять размер;

Похоже, что другого способа нет.

Комментарии:

1. Что мне нужно, так это прямое событие из браузера, когда элемент изменяет свой размер. AFAIK это доступно только в IE…

2. Похоже, что на данный момент это невозможно.