JavaScript. Подробное руководство, 6-е издание, стр. 263
<b> 0; // свойство не определено</b><b> // Большинство броузеров генерируют одно событие со значением 120</b><b> // на один щелчок колесика. Однако похоже, что мыши компании Apple</b><b> // более чувствительные, и значения свойств delta часто оказываются</b><b> // в несколько раз больше 120, по крайней мере, для Apple Mouse.</b><b> // Использовать прием проверки типа броузера, чтобы решить эту проблему,</b><b> if (isMacWebkit) { </b><b> deltaX /= ЗО;</b><b> deltaY /= 30;</b><b> }</b><b> // Если мы когда-нибудь будем получать событие mousewheel или wheel в (будущих </b><b> // версиях) Firefox, можно отказаться от обработки события DOMMouseScroll.</b><b> if (isFirefox && e.type !== '‘DOMMouseScroll")</b><b> frame.removeEventListener("DOMMouseScroll", wheelHandler, false);</b><b> // Получить текущие размеры элемента содержимого</b><b> var contentbox = content.getBoundingClientRectO;</b><b> var contentwidth = contentbox.right - contentbox.left;</b><b> var contentheight = contentbox.bottom - contentbox.top;</b><b> // Если удерживается нажатой клавиша Alt, изменить размеры фрейма</b><b> if (e.altKey) {</b><b> if (deltaX) {</b><b> framewidth -= deltaX; // Новая ширина фрейма, но не больше,</b><b> framewidth = Math.min(framwidth, contentwidth); // чем ширина</b><b> framewidth = Math.max(framewidth,50); // содержимого</b><b> frame.style.width = framewidth + "px"; // и не меньше 50</b><b> }</b><b> if (deltaY) {</b><b> frameheight -= deltaY; // To же для высоты фрейма</b><b> frameheight = Math.min(frameheight, contentheight);</b><b> frameheight = Math.max(frameheight-deltaY, 50);</b><b> frame.style.height = frameheight + "px";</b><b> }</b><b> }</b><b> else { // Клавиша Alt не нажата, прокрутить содержимое в фрейме</b><b> if (deltaX) {</b><b> // Прокручивать не больше, чем</b><b> var minoffset = Math.min(framewidth-contentwidth, 0);</b><b> // Сумма deltaX и contentX, но не меньше, чем minoffset</b><b> contentX = Math.max(contentX + deltaX, minoffset);</b><b> contentX = Math.min(contentX, 0); // или больше 0</b><b> content.style.left = contentX + "px"; // Новое смещение</b><b> }</b><b> if (deltaY) {</b><b> var minoffset = Math.min(frameheight - contentheight, 0);</b><b> // Сумма deltaY и contentY, но не меньше, чем minoffset</b><b> contentY = Math.max(contentY + deltaY, minoffset);</b><b> contentY = Math.min(contentY, 0); // или больше О</b><b> content.style.top = contentY + "px"; // Новое смещение.</b><b> }</b><b> }</b><b> // He позволять всплывать этому событию. Предотвратить выполнение действий</b><b> // по умолчанию. Это позволит предотвратить прокрутку содержимого документа</b><b> // в окне броузера. Будем надеяться, что вызов preventDefault() для события wheel</b><b> // также предотвратит возбуждение дублирующего события mousewheel.</b><b> if (е.preventDefault) е.preventDefault();</b><b> if (е.stopPropagation) е.stopPropagation();</b><b> e.cancelBubble = true; // модель событий IE</b><b> e.returnValue = false; // модель событий IE</b><b> return false;</b><b> }</b><b>}</b>17.7. События механизма буксировки (drag-and-drop)
В примере 17.2 было показано, как реализовать операцию буксировки элементов мышью. Она позволяет перетаскивать и оставлять элементы в пределах веб-страницы, но истинная буксировка - это нечто иное. Буксировка (drag-and-drop, или DnD)- это интерфейс взаимодействия с пользователем, позволяющий перемещать данные между «источником» и «приемником», которые могут находиться в одном или в разных приложениях. Буксировка (DnD) - это сложный механизм организации взаимодействий между человеком и машиной, и прикладные интерфейсы, реализующие поддержку буксировки, всегда отличались высокой сложностью: