Javascript-магистрам
О великие Javascript-магистры )) Нормально ли я реализовал галерею изображений + тултип на уровне знаний до статьи "Делигирование событий", что в теме "События, взаимодействие с посетителем"( http://learn.javascript.ru/event-delegation ) ?)) http://learn.javascript.ru/play/hfR3Cb
|
лично я, вроде, косяков серьёзных не нашёл, только идентификация косячная - лучше помечать картинки своим тегом (добавить случайный класс), чтобы не цеплять чужие.
но тут этого не нужно было делать :) ну и по мелочи, вроде такого : span.onclick=function(e){ ... var largeImg=document.getElementById('largeImg'); ... } largeimg лучше закешировать и не искать одно и то же при каждом клике |
Логично)) Спасибо за помощь:)
|
VladShestakov999,
в старых ИЕ это работать не будет var target = e.target || event.srcElement; так как на e.target выдаст ошибку и проверка не будет выполнена, а так работать будет var target = event.srcElement || e.target ; так же нельзя делать так (точнее делать можно но работать не будет, не помню точно где, вроде в том же старом ие или лисе, вроде в лисе) e = e || window.event; но можно так function(evt){ var e = evt || window.event; |
Цитирую учебник:
Цитата:
|
VladShestakov999,
я читал эту книгу, и в свое время я наступил на эти грабли, не верите, пробуйте сами <!DOCTYPE HTML> <html> <head> </head> <body> <div id='test'> <span>click span(does not work in old IE)</span> </div> <div id='test1'> <span>click span( work in old IE)</span> </div> <script> document.getElementById('test').onclick = function (e) { var target = e.target || event.srcElement; alert('work') } document.getElementById('test1').onclick = function (e) { var target = event.srcElement || e.target;// меняем местами alert('work') } </script> </body> </html> |
VladShestakov999, второе так же можете проверить(в последней версии лисы , бага нет но в старых есть)...
|
cyber,
Для начала нужно получить window.event для ie. А потом уж проверять на target/srcElement |
zebra,
в ие event это свойство window. |
Ну и правильно)) С чего бы ему работать? В учебнике четко написано:
Цитата:
e=e || window.event; var target = e.target || e.srcElement; Попробуйте, через IE tester, например: http://learn.javascript.ru/play/Ah6tz А по поводу FF не знаю, возможно вы и правы. Стоит проверить |
У вас ошибка в 18 строке. "e" не будет существовать для ie.
|
Галерея изображений, делегирование, tooltip
делегирование
<!DOCTYPE HTML> <html> <head> <title>Галерея</title> <style> body { margin: 0; padding: 0; font: 75%/120% Arial, Helvetica, sans-serif; } h2 { font: bold 190%/100% Arial, Helvetica, sans-serif; margin: 0 0 .2em; } h2 em { font: normal 80%/100% Arial, Helvetica, sans-serif; color: #999999; } #largeImg { border: solid 1px #ccc; width: 550px; height: 400px; padding: 5px; } #thumbs{ text-align:center; } #thumbs a { position:relative; display:block; border: solid 1px #ccc; width: 100px; height: 100px; padding: 3px; margin: 2px; float: left; } #thumbs a:hover { border-color: #FF9900; } .tooltip{ border-radius:3px; border-bottom-left-radius:0; padding:5px; color:white; z-index:3; position:absolute; top:-15px; right:-15px; background:rgba(0,0,0,.6); } .tooltip:after{ content: ""; position: absolute; left: -0.6px; bottom: -5px; z-index:3; -webkit-transform: rotate(0deg) skewX(-14deg); border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 5px solid rgba(0,0,0,.6); } p{ position:relative; } </style> <meta charset="utf-8"> </head> <body> <p> <img id="largeImg" src="https://js.cx/gallery/img1-lg.jpg" alt="Large image"> </p> <span id="thumbs"> <!-- При наведении на изображение показывается встроенная подсказка браузера (title) --> <a href="https://js.cx/gallery/img2-lg.jpg" title="Image 2"><img src="https://js.cx/gallery/img2-thumb.jpg"></a> <a href="https://js.cx/gallery/img3-lg.jpg" title="Image 3"><img src="https://js.cx/gallery/img3-thumb.jpg"></a> <a href="https://js.cx/gallery/img4-lg.jpg" title="Image 4"><img src="https://js.cx/gallery/img4-thumb.jpg"></a> <a href="https://js.cx/gallery/img5-lg.jpg" title="Image 5"><img src="https://js.cx/gallery/img5-thumb.jpg"></a> <a href="https://js.cx/gallery/img6-lg.jpg" title="Image 6"><img src="https://js.cx/gallery/img6-thumb.jpg"></a> </span> <script> var d = document.getElementById("thumbs"), e = document.getElementById("largeImg"); d.onmouseover = function (a) { a = a || window.event; a = a.target || a.srcElement; if ("IMG" == a.tagName) { var b = document.createElement("div"), c = a.parentNode; b.innerHTML = c.title; b.className = "tooltip"; c.appendChild(b); a.onmouseout = function () { c.removeChild(b) this.onmouseout = null } } }; d.onclick = function (a) { a = a || window.event; a = a.target || a.srcElement; "IMG" == a.tagName && (e.src = a.parentNode.href); return false }; </script> </body> </html> |
zebra,
знаю, поэтому и проверяю сначала на event.scrElement так как другие браузеры не вызывают ошибку на него (хотя должны) и тогда можно отказать от лишнего условия проверки event поменяв их местами. P.s когда писал тот коммент просто не увидел что у автора есть проверка на event |
function (e) { alert(event); } Откуда event тогда возьмется в других браузерах кроме ie? |
zebra,
VladShestakov999, как оказалось фишка в том что у хрома есть свойтсво event у window) |
Ввел в консоль хрома window.event. Получил undefined :nono:
Хотя да, что-то я провтыкал, оно при событии появляется. |
zebra, а я забыл что у меня опера стоит на webkit и подумал что там тоже работает))
|
в 10 версии лисы все нормально, значить уже в общем не актуально)
|
рони, Оригинальное решение)) :)
|
Часовой пояс GMT +3, время: 21:09. |