Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.07.2012, 19:56
Интересующийся
Отправить личное сообщение для _Ivan Посмотреть профиль Найти все сообщения от _Ivan
 
Регистрация: 27.07.2012
Сообщений: 12

Мерцание лупы
код:

var zoom={
create:function(){
zoom.obj=create('div');
zoom.obj.style.background='url(/img/zoom.gif) no-repeat 50% 50%';
zoom.obj.style.position='absolute';
zoom.obj.style.opacity=0.5;
zoom.obj.style.display='none';
},
update:function(){
var a = document.getElementsByTagName("a");
for (var i=0;i<a.length;i++){
if(a[i].rel!=''){
var img = a[i].getElementsByTagName("img");
for (var j=0;j<img.length;j++){
img[j].onmouseout = function(){
hide(zoom.obj);
};
img[j].onmousemove = function(){
zoom.obj.style.top=ElemCoords(this).y+"px";
zoom.obj.style.left=ElemCoords(this).x+"px";
zoom.obj.style.width=this.offsetWidth+"px";
zoom.obj.style.height=this.offsetHeight+"px";
show(zoom.obj);
};
}
}
}
}
};

zoom.create();
zoom.update();

<div>
<a href="/img/gal/1.jpg" rel="11" onclick="return gal.open(this)"><img src="/img/gal/1_1.jpg" width="151" height="100" alt="sample image"></a>

Ф-я ищет на странице теги А с атрибутом rel и накладывает на картинки лупу для кликабельных картинок. Проблема в том, что лупа мерцает. При наведении курсора на картинку поочерёдно срабатывают обе функции: onmousemove и onmouseover, и картинка мерцает. Гуглил, но не нашел ответа. Где ошибка?
Ответить с цитированием
  #2 (permalink)  
Старый 27.07.2012, 20:22
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

лупа у Вас накладывается сверху объекта и в этот момент естественно на img срабатывает mouseout-логика неверная-
Ответить с цитированием
  #3 (permalink)  
Старый 27.07.2012, 20:37
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

_Ivan,
Выход - обернуть картинку <span class="wrap" style=display:inline-block;>тут img </span>
И отслеживать наведение на span.wrap , по наведению, саму "лупу" аппенчилдить с абсолютной позицией внутрь span.wrap

Выход же делать - при выходе положения курсора по координатам за пределы span.wrap + 1/2 "лупы"
Ответить с цитированием
  #4 (permalink)  
Старый 28.07.2012, 00:22
Интересующийся
Отправить личное сообщение для _Ivan Посмотреть профиль Найти все сообщения от _Ivan
 
Регистрация: 27.07.2012
Сообщений: 12

Черт, второй раз наступаю на эти грабли со слоями.

При наведении мыши на картинку срабатывает событие onmousemove, на картинку накладывается слой с картинкой лупы, у этого слоя размеры первой картинки, теперь таргетом является лупа, а картинку мышь не видит, срабатываеи событие onmouseover, лупа выключается и все повторяется с начала, отсюда мерцание.

Всем спасибо
Ответить с цитированием
  #5 (permalink)  
Старый 28.07.2012, 00:39
Интересующийся
Отправить личное сообщение для _Ivan Посмотреть профиль Найти все сообщения от _Ivan
 
Регистрация: 27.07.2012
Сообщений: 12

Переделал скрипт (выдрал кусок кода из интернета)

<style>
.zoom{
background:url(Image\ Link_files/zoom.gif) no-repeat 50% 50%;
opacity: 0.5;
}
</style>

function updateZoomImg(){
		var a = document.getElementsByTagName("a");
		for (var i=0;i<a.length;i++){
			if(a[i].rel!=''){
				var img = a[i].getElementsByTagName("img");		
				for (var j=0;j<img.length;j++){			
					a[i].style.position = "static";						 
					var image = img[j];
					if(a[i].getElementsByTagName("span").length > 0) a[i].removeChild(a[i].getElementsByTagName("span")[0]);
					var span = document.createElement("span");	
					span.style.position="absolute";
					span.style.top=image.offsetTop+"px";
					span.style.left=image.offsetLeft+"px";
					span.style.width=image.offsetWidth+"px";
					span.style.height=image.offsetHeight+"px";
					span.a = img[j].a = a[i];	
					a[i]["span"] = span;
					span.onmouseover = function(){this.a["span"].className = 'zoom';};
					span.onmouseout = function(){this.a["span"].className = '';};
					a[i].appendChild(span);							
				}
			}
		}
}
addEvent(window,"load",updateZoomImg);
addEvent(window,"resize",updateZoomImg);


Установку координат надо поменять, а так работает.

Вопросы:
1. Я не понял значение строки span.a = img[j].a = a[i]; В "span.a" что такое "а", это свойство или тэг?

2. лупа прописана в стилях, а нужно ли делать прелоад картинки?
Ответить с цитированием
  #6 (permalink)  
Старый 28.07.2012, 06:15
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Сообщение от _Ivan Посмотреть сообщение
Вопросы:
1. Я не понял значение строки span.a = img[j].a = a[i]; В "span.a" что такое "а", это свойство или тэг?
Это свойство конечно cделано чтобы из обработчика
span или img[j] можно было обратиться к соответствующей ссылке как
this.a
Ответить с цитированием
  #7 (permalink)  
Старый 28.07.2012, 14:47
Интересующийся
Отправить личное сообщение для _Ivan Посмотреть профиль Найти все сообщения от _Ivan
 
Регистрация: 27.07.2012
Сообщений: 12

Возникла новая проблема с работой скрипта.
Демо на kalevka.ru

В средней колонке есть три превьюшки, скрипт updateZoomImg находит их, обертывает span-ом. При наведении курсора на картинку на неё накладывается "лупа". Проблема с меню. Если меню налезает на превью-картинку, то оно вырубается. Помогите!!!
Ответить с цитированием
  #8 (permalink)  
Старый 28.07.2012, 16:01
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от _Ivan
При наведении курсора на картинку на неё накладывается "лупа". Проблема с меню. Если меню налезает на превью-картинку,
Так - не спаcает ?

<!-- end left -->
</td>
<!-- center -->
*!*
<td  valign="top" style="padding-top:100px;">
*/!*
<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>

<a href="#" rel="11"><img src="/img/1_1.jpg" width="151" height="100"></a>
<a href="#" rel="22"><img src="/img/2_1.jpg" width="151" height="100"></a>
<a href="#" rel="rr"><img src="img/3_1.jpg" width="151" height="100"></a>
<!-- end center -->

</td>
</tr></table>
*Красным поправка
Ответить с цитированием
  #9 (permalink)  
Старый 28.07.2012, 21:50
Интересующийся
Отправить личное сообщение для _Ivan Посмотреть профиль Найти все сообщения от _Ivan
 
Регистрация: 27.07.2012
Сообщений: 12

Нет. Превьюшки могут быть где угодно. Вопросы уже не теме. Спасибо всем, пойду в другой раздел.

Последний раз редактировалось _Ivan, 29.07.2012 в 11:19.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pop-up блоки, hover и мерцание Dudo4nick jQuery 6 02.09.2011 16:43
Увеличение части изображения при наведении, эффект лупы. Simpleplan Общие вопросы Javascript 3 13.12.2010 22:27
мерцание в ie6 theo_ Internet Explorer 5 16.10.2009 22:05