Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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 цвет, и если он попадает в область то этот квадрат становится ссылкой (имеется ввиду мой случай)
это конечно сложно, поэтому можно этим не заниматься
помогите решить проблему почему не отображается картинка при наведении на ссылку

Автор: ksnk 20.11.2010, 12:10
Stephenlab, Насчет получения цвета картинки по координатам - все достаточно грустно, хотя и не так, как может показаться.
в принципе, картинку можно выковырять, поместить ее в объект canvas и явно проверить в ней цвета по координатам. Некоторый геморой, и , возможно, грусть, возникнет при прикручивании ExplorerCanvas для IE- броузеров. Впрочем, это не так смертельно.
http://disruptive-innovations.com/zoo/demos/eyes.html какими средствами можно пользоваться для этого в  хром-мозилах-операх. В IE средства те-же, но слова немного другие  smile

Добавлено через 7 минут и 15 секунд
Цитата(Stephenlab @  20.11.2010,  11:52 Найти цитируемый пост)
есть похожая вещь
http://sstrudeau.com/jquery-dropper/demo/index.html


Цитата(Stephenlab @  20.11.2010,  11:52 Найти цитируемый пост)
помогите решить проблему почему не отображается картинка при наведении на ссылку

В каком месте не отображается картинка? В IE6-7-8? и не будет.  smile 

Автор: 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 поверх бекграунда с шапкой, чтобы все пиксели оставались на своих местах и не сдигались по отношению к шапке или других столбцов и строк?

С обоими скриптами знаком, просто хочется сделать как лучше и чтоб целая картинка отображалась корректно на разных мониторах.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)