Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Движение фотографии внутри блока (https://javascript.ru/forum/events/35872-dvizhenie-fotografii-vnutri-bloka.html)

Evgeniya 25.02.2013 09:09

Движение фотографии внутри блока
 
Здравствуйте! На странице следующая структура: слева большой блок, а справа маленькие блоки с превью изображения. При клике на превью изображение исходного размера появляется в большом блоке слева. В этом блоке мы видим только часть изображения, а остальную часть можем смотреть, когда водим курсором внутри блока.
Вот код, который ловит событие .mousemove() и выполняет действия

$("#big_photo").mousemove(function(e) {
var offset = $(this).offset();
var relativeX = (e.pageX - offset.left);
var relativeY = (e.pageY - offset.top);

$("#big_photo img").css({"position":"relative","left":"-"+relativeX+"px","top":"-"+relativeY+"px"});
});

Все работает, но, когда я дохожу курсором до края блока, то я не вижу конец изображения. Оно показывается не полностью. В выражении с подсчетом координат мне нужно еще учитывать координаты самого изображения, но записать правильно у меня не получается. Если есть у кого идеи, скажите, пожалуйста. Буду благодарна! =)

рони 25.02.2013 20:32

Evgeniya,
вариант ...
<!DOCTYPE HTML>
<html>
<head>
  <title></title>
<meta charset="utf-8" />
<style type="text/css">
#big_photo{
  width: 200px;
  height: 100px;
  position:   absolute;
  overflow: hidden;
  left: 300px
}

#big_photo img{
  position:   relative;
}
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(function(){
$("#big_photo").mousemove(function(e) {
 var offset = $(this).offset();
 var divW = $("#big_photo").outerWidth();
 var divH = $("#big_photo").outerHeight();
 var sW = ($("#big_photo img").outerWidth() - divW)/divW;
 var sH = ($("#big_photo img").outerHeight()- divH)/divH;
 var relativeX = (e.pageX - offset.left);
 var relativeY = (e.pageY - offset.top);
 $("#big_photo img").css({
					left: -(sW *relativeX)|0,
					top: -(sH*relativeY)|0
				});
 });
});
</script>
</head>
<body>
<div class="tags" id="big_photo"><img  src="http://if.mynet.com/93/3/58/1256714b.jpg" border="0" alt="" /></div>
<img  src="http://if.mynet.com/93/3/58/1256714b.jpg" border="0" alt="" width="200" />
</body>

</html>


Часовой пояс GMT +3, время: 16:32.