Помогите сделать скрол изображения
Доброго времени суток! Прошу помощи с весьма непростым для меня вопросом.
Итак, есть <div></div> листинг ниже. <div id="hall" class="hall_cont" style="margin: auto; background: transparent url(saal_img.jpg) no-repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; width: 1242px; height: 952px; position: relative; top: 0px; left: 0px;"></div> В итоге на странице отображается "часть" рисунка. Вот так. ![]() Исходный рисунок, который идет на бекграунд в DIV вот. ![]() Задача: как сделать и что использовать, чтобы происходил скрол бэкграунда в DIV при вождении указателя мышки по диву? То есть если мы будем вести мышку в диве направо - бэкраунд плавно "съезжает" тоже вправо. И как реагировать на скорость "ведения" курсора, чтобы скрол бэкраунда мог также менять свою скорость? Задача нелегкая, но я думаю вы мне подскажете. Прошу вас помочь примерами. Всем спасибо за проявленный интерес. |
Диву присвой свойство overflow:hidden;
картику вложи в див, с position:absolute; и по событию onmousemove установленном на диве изменяй свойства left и top картинки |
Цитата:
А скорость регулирется расстоянием от центра Div. |
Цитата:
|
То есть можно начать так?
<style type="text/css">
.hall_container{
border: 2px #da251d dotted;
overflow: hidden;
width: 550px;
height: 550px;
position: relative;
top: 0;
left: 0;
margin: auto;
background: transparent url(hall.jpg) no-repeat scroll 0% 0%;}
</style>
<script language="javascript" type="text/javascript">
<!--
function scrollHall()
{
}
//-->
</script>
</head>
<body>
<div id="hall_container" class="hall_container" onmousemove="scrollHall()">/div>
</body>
|
только
<div id="hall_container" class="hall_container" onmousemove="scrollHall(this)"></div> что бы в функцию попадал элемент который надо сместить (что бы не выбирать его повторно) осталось написать функцию. |
Вопрос, как узнать координаты мыши относительно div id="hall_container" ?
|
Цитата:
+ вот тут показано как узнать координату мыши. А дальше вычитаем из одного другое и получаем смещение по х и у относительно div id="hall_container" ps: вчера не доглядел и написал пол решения, сегодня дописал :) |
Gozar, спасибо очень помогло=)
Тут еще вопрос нарисовался к знатокам. Вот например кусок кода.
var tmp = document.getElementById('hall_container');
tmp.style.top = ( tmp.style.top.replace ( 'px', '' ) - 1 ) + 'px';
Нормально попиксельно сдвигает див. А вот этот
var tmp = document.getElementById('hall_container');
tmp.style.top = ( tmp.style.top.replace ( 'px', '' ) + 1 ) + 'px';
Заставляет див сместиться на такое количество пикселей, что он сразу улетает очень далеко. Что не правильно, ведь разница в кодах только в знаке? |
tmp.style.top = ( parseInt(tmp.style.top) + 1 ) + 'px'; |
Мараторий,
parseInt lействительно подействовал, спасибо |
Для прокрутки использую функцию вместе с setInterval. Из функции-обработчика onmousemove вызываю:
setInterval( goScroll('left',speedCoeff1), 100 );
и вот сама функция
function goScroll(direction,speed){
switch (direction) {
case 'left':
hall_container.style.left = ( parseInt(hall_container.style.left) + speed ) + 'px';
break;
//...
}
}
Но она работает не так как хотелось бы. Точнее все происходит как будто и нету setInterval - то есть скролл осуществляется только при вождении мышкой, а не "автоматом". Что не так делаю? |
Внутри setInterval вы вызываете функцию goScroll
goScroll('left',speedCoeff1)
и результат ее работы передается первым параметром для setInterval. Полагаю, что эта функция ничего не возвращает, т.е. возвращает undefined. Вам надо сделать что-то типа этого:
setInterval( function() { goScroll('left',speedCoeff1) }, 100 );
|
| Часовой пояс GMT +3, время: 03:54. |