Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > JavaScript: Общие вопросы > Найти элемент и присвоить ссылку |
Автор: Stephenlab 20.11.2010, 10:58 |
Есть картинка, состоящая из квадратов 2х2px разных цветов на белом фоне) и которая является фоном страницы. Возможно ли чтоб скрипт нашел все квадраты (не белого цвета) пронумеровал их, чтоб потом каждому присвоть ссылки? Добавлено @ 11:07 Решения так и не нашел, смог сделать только так: создал горячую область map area, при наведении на которую появляется ссылка с картинкой. создал файл link.css 1 .bulletimagestyle 2 { 3 position: absolute; 4 left: -200px; 5 } и link.js 01 var bulletimg1=["ПУТЬ К ФАЙЛУ/КАРТИНКА2.jpg", 25, 2, 0] 02 03 var classnameRE=/(^|\s+)ddbullet($|\s+)/i 04 function caloffset(what, offsettype){ 05 var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop; 06 var parentEl=what.offsetParent; 07 while (parentEl!=null){ 08 totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop; 09 parentEl=parentEl.offsetParent; 10 } 11 return totaloffset; 12 } 13 function displaybullet(linkobj){ 14 var reltovar=window[linkobj.getAttribute("rel")] 15 bulletobj.setAttribute("src", reltovar[0]) 16 bulletobj.style.left=caloffset(linkobj, "left")-reltovar[1]-reltovar[2]+"px" 17 bulletobj.style.top=caloffset(linkobj, "top")-reltovar[3]+"px" 18 bulletobj.style.visibility="visible" 19 } 20 function modifylinks(){ 21 bulletobj=document.createElement("img") 22 bulletobj.setAttribute("id", "bulletimage") 23 bulletobj.className="bulletimagestyle" 24 document.body.appendChild(bulletobj) 25 for (i=0; i<document.links.length; i++){ 26 if (typeof document.links[i].className=="string" && document.links[i].className.search(classnameRE)!=-1){ 27 document.links[i].onmouseover=function(){displaybullet(this)} 28 document.links[i].onmouseout=function(){bulletobj.style.visibility="hidden"} 29 } 30 } 31 } 32 if (window.addEventListener) 33 window.addEventListener("load", modifylinks, false) 34 else if (window.attachEvent) 35 window.attachEvent("onload", modifylinks) 36 else if (document.getElementById || document.all) 37 window.onload=modifylinks в блокноте.html прописал 01 <html> 02 <head> 03 <title>Untitled</title> 04 05 <link rel="stylesheet" href="ПУТЬ К ФАЙЛУ/link.css" type="text/css" /> 06 <script language="JavaScript" type="text/javascript" src="ПУТЬ К ФАЙЛУ/link.js"></script> 07 08 </head> 09 10 <body> 11 12 <MAP NAME="map1"> 13 <AREA href="http://...." SHAPE="rect" COORDS="200,200,150,150" class="ddbullet" rel="bulletimg1" > 14 </MAP> 15 16 <IMG src="ПУТЬ К ФАЙЛУ/КАРТИНКА1.jpg" WIDTH="1440" HEIGHT="900" BORDER="0" USEMAP="#map1"> 17 18 </body> 19 </html> КАРТИНКА1 как фон отображается, горячая область есть, и при наведении появляется ссылка. Но при наведении на ссылку не отображается КАРТИНКА2. Почему? Может не правильно прописал в блокноте.html ? |
Автор: bars80080 20.11.2010, 11:17 |
ничего не понятно. у вас квадраты - это пикселы на картинке? и как вы собрались их считать? |
Автор: Stephenlab 20.11.2010, 11:32 |
да, квадраты это пиксели 2х2, проблема в том что картинка цельная, там много таких квадратов, а фон 1 цвета отличного от квадратов ну вот я и хотел спросить если есть такой скрипт который ищет к примеру квадрат 2х2 желтого цвета и присваивает ему id но мне кажется что это нереально, поэтому вручную создаю горячую область и присваиваю ей ссылку, проблема в том что не отображается у меня картинка при наведении в IE, а в опере вообще ничего не отображается. В чем может быть проблема? |
Автор: Stephenlab 20.11.2010, 11:52 |
есть похожая вещь http://sstrudeau.com/jquery-dropper/demo/index.html пощелчку мыши на картинку вверху в квадрате выдается цвет если к примеру в скрипте указать только на 1 цвет, и если он попадает в область то этот квадрат становится ссылкой (имеется ввиду мой случай) это конечно сложно, поэтому можно этим не заниматься помогите решить проблему почему не отображается картинка при наведении на ссылку |
Автор: Stephenlab 20.11.2010, 12:24 |
ksnk, Спасибо, сейчас попробую разобраться в скрипте, хотя эта страничка у меня не отображается в обоих браузерах Добавлено через 14 минут и 38 секунд ksnk, IE8 не отображается картинка при наведении на горячую область, ссылка появляется а картинка нет - там пустое окошечко высвечивается, в котором по идее должна быть картинка сайт с красными глазами не выдает картинку, пытаюсь подгрузить вручную - ничего не выходить, но ход ваших мыслей понял , надо бы еще разобраться что к чему ))) |
Автор: ksnk 20.11.2010, 13:04 |
Stephenlab, В IE показываться не будет, разве что в IE9. Судя по тому, что я успел узнать - это принципиально, так как ExplorerСanvas использует встроенный в IE язык VML для эмуляции canvas'а, а в этом языке просто физически нет возможности узнать цвет отрисованной конструкции, так что это вероятнее всего не лечится :( |
Автор: Stephenlab 20.11.2010, 13:29 |
ksnk, спасибо |
Автор: ksnk 20.11.2010, 13:56 |
Вчитался в первый пост... А что за задача-то решается? если просто какой-то переход по схеме на картинке, то слишком маленькие элементы - 2x2 - легко промазать мышом, а особенно пальцем на сенсорных экранах. В принципе - идея с map'ом должна бы сработать. хотя сам map для переходов по цветовой схеме лучше генерить на сервере, один раз открыть картинку, честно пробежаться по всем пикселям и нарисовать карту цветов-ссылок. Потом подключать получившийся map к нужной картинке. На сами area вполне навешиваются события onmouseover, так что особых проблем быть не должно... |
Автор: Stephenlab 20.11.2010, 14:13 |
ksnk, квадратов 2х2 разных цыетов много и они складываются в картинку, как пазл между ними есть промежутки при наведении можно сделать чтоб квадрат немного увеличивался и над ним появлялась картинка и ссылка щас подумал, можно сделать 1 такой квадрат отдельно и вставлять по координатам поверх тех что есть на фоновой картинке но никак не пойму почему картинка поверх квадрата не отображается, ссылка есть и отображается пустое окно там где по идее должна отображаться картинка |
Автор: Stephenlab 22.11.2010, 10:17 |
С пикселями разобрался. Создал CSS файл который при наведении на пиксель выводит картинку с сылкой. Пиксели раскидал на бекграунде, прописал каждому определенные координаты таким способом: <a href="http://"> <div><img src="ПУТЬ К ФАЙЛУ\blue-px.jpg" style="position:absolute; top:540px; left:357px;"/><img src="КАРТИНКА ПРИ НАВЕДЕНИИ\.gif" class="prev" style="position:absolute; top:479px; left:256px;"/></div></a> <a href="http://"> <div><img src="ПУТЬ К ФАЙЛУ\green-px.jpg" style="position:absolute; top:545px; left:357px;"/><img src="КАРТИНКА ПРИ НАВЕДЕНИИ\.gif" class="prev" style="position:absolute; top:484px; left:256px;"/></div></a> Проблема в том, что у меня разрешение монитора 1440х900, если смотреть страницу на большем мониторе, эти пиксели сдвигаются. И еще нужно создать вверху строку, где будут располагаться название, поиск по сайту и другие элементы. Как лучше сделать, создать несколько таблиц через <table > <tr> <td ></td> </tr> </table > отдельно для верхней шапки и для основного бекграунда с пикселями? ИЛИ воспользоваться скриптом z-index который создаст слой 1 для бекграунда, слой 2 поверх бекграунда с шапкой, чтобы все пиксели оставались на своих местах и не сдигались по отношению к шапке или других столбцов и строк? С обоими скриптами знаком, просто хочется сделать как лучше и чтоб целая картинка отображалась корректно на разных мониторах. |