Как получить доступ к событию onresize из веб-части SharePoint?

У меня есть код JavaScript, который будет выполняться в веб-части SharePoint. Я хотел бы, чтобы функция выполнялась при изменении размера окна. Обычно я бы использовал

<html>
  <body onresize="resizeFunction();">
  </body>
</html>

но в SharePoint все становится непросто. У меня есть onload функция, которую я могу использовать таким образом:

_spBodyOnLoadFunctionNames.push('myFunctionName');

и это выполняется в событии onLoad. Есть ли что-то подобное для onResize мероприятий?


person Nathan DeWitt    schedule 01.06.2009    source источник


Ответы (1)


Вы можете рассмотреть возможность использования внешней библиотеки javascript, такой как jQuery, прототип и т. Д.

Например, в jQuery вы можете попробовать (непроверенный код !!)

$("window").bind("resize", "myFunctionName");

Документы jQuery: http://docs.jquery.com/Events/bind

информация об использовании jQuery в SharePoint: http://weblogs.asp.net/jan/archive/2008/11/20/sharepoint-2007-and-jquery-1.aspx

РЕДАКТИРОВАТЬ: если вы не хотите использовать внешнюю библиотеку, при загрузке документа запустите функцию, которая присоединяет другую функцию к событию изменения размера. Что-то типа:

_spBodyOnLoadFunctionNames.push(function() {
    window.onresize = function() {
         /* resize code here */
    }});

Конечно, вы можете использовать именованные функции.

РЕДАКТИРОВАТЬ 2: определение ваших событий, как указано выше (window.onresize =), подходит только для одного события. Таким образом, если несколько обработчиков событий указаны одинаково для одного и того же события на одной странице, то «выигрывает» тот из них, который был указан последним. «Правильный» способ сделать это - присоединить обработчик событий, а самый простой способ сделать это - через библиотеку, поскольку они прозрачно обрабатывают межбраузерные различия.

person Chloraphil    schedule 01.06.2009
comment
Я бы предпочел не использовать внешнюю библиотеку, если мне не нужно, но если это единственный способ ... - person Nathan DeWitt; 01.06.2009