[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: перемещение обьекта внутри обьекта
qpayct
почему не перемещается?
<div id="mydiv" style="width:1000px;height:100px;overflow:hidden;" onmousemove="mover(id, event)">
<div
id="inner" style="width:40000px;height:100px;">1</div>
</div>
<div
id="posX"></div>
<div
id="posY"></div>


function mover(id, event) {
//var frameWidth = document.getElementById(id).clientWidth;
//var frameHeight = document.getElementById(id).clientHeight;
//var inframeLeft = document.getElementById('inner').offsetLeft;
//var inframeTop = document.getElementById('inner').offsetTop;

var obj = document.getElementById('inner').style;
obj.left = -100 + 'px';
//alert(obj.left);

document.getElementById('posX').innerHTML = 'X : ' + event.clientX;
document.getElementById('posY').innerHTML = 'Y : ' + event.clientY;
}




Спустя 19 минут, 52 секунды (15.03.2010 - 21:36) sergeiss написал(а):
Ну, для начала.... У тебя в начальном коде (до того, как ты его скорректировал smile.gif) были неправильно указаны имена.
Затем. Минус (дефис) развер разрешен в именах?

Спустя 1 минута, 12 секунд (15.03.2010 - 21:37) qpayct написал(а):
Цитата (sergeiss @ 15.03.2010 - 20:36)
Ну, для начала.... У тебя в начальном коде (до того, как ты его скорректировал smile.gif) были неправильно указаны имена.
Затем. Минус (дефис) развер разрешен в именах?

дк торопился.... ошибки в родном коде не было smile.gif

а дефис всегда работал до сих пор но специально дабы рассеить двуякость я его убрал

Спустя 1 минута (15.03.2010 - 21:38) sergeiss написал(а):
Вот твой код в рабочем виде (переделан из первоначально выложенного варианта)... Если я правильно понимаю, то обязательно указывать position надо.

<div id="mydiv" style="width:1000px;height:100px;overflow:hidden; background-color:#00CCFF; position:relative" onmousemove="mover(id, event)">
<div
id="inner_div" style="width:40000px;height:100px; background-color:#FF0000; position:relative; left:100px">1</div>
</div>
<div
id="posX"></div>
<div
id="posY"></div>

<script
language="javascript" type="text/javascript">
function
mover(id, event) {

var frameWidth = document.getElementById(id).clientWidth;
var frameHeight = document.getElementById(id).clientHeight;

var inframeLeft = document.getElementById('inner_div').offsetLeft;
var inframeTop = document.getElementById('inner_div').offsetTop;
document.getElementById('inner_div').style.left = 200 + 'px';

document.getElementById('posX').innerHTML = 'X : ' + event.clientX;
document.getElementById('posY').innerHTML = 'Y : ' + event.clientY;
}
</script>

<input
type="text" name="posX" id="posX" /><br />
<input
type="text" name="posY" id="posY" /><br />


При подведении мышки вложенный ДИВ перепрыгивает, и позиции пишутся правильно в нужные поля. Реально меняются цифирьки smile.gif

Спустя 3 минуты, 2 секунды (15.03.2010 - 21:41) qpayct написал(а):
sergeiss точно! ну спасибо дружище. в какой раз уже выручаешь? с меня мерси wink.gif

Спустя 1 минута, 15 секунд (15.03.2010 - 21:42) sergeiss написал(а):
Цитата (qpayct @ 15.03.2010 - 22:41)
с меня мерси

"Мерси" сгущёнкой не пахнет! smile.gif

Спустя 1 минута, 47 секунд (15.03.2010 - 21:44) qpayct написал(а):
это да biggrin.gif зато бесплатно

Спустя 1 час, 17 минут, 33 секунды (15.03.2010 - 23:02) qpayct написал(а):
забадался.... бошка отказуется думать sad.gif

хочу сделать так, чтоб пока мыша находится внутри внешнего элемента, внутренний элемент двигался. попытался зациклить не хочет... как быть?
var i=0;

function runer() {
var obj = document.getElementById('inner').style;

i-=20;
obj.left = i + 'px';
document.getElementById('inner').onpropertychange = runer();

//document.getElementById('posX').innerHTML = 'i : ' + i;
//document.getElementById('posY').innerHTML = 'left : ' + obj.left;

}

Спустя 17 минут, 50 секунд (15.03.2010 - 23:20) glock18 написал(а):
смотри события mouseover и mouseout

Спустя 3 минуты, 19 секунд (15.03.2010 - 23:23) sergeiss написал(а):
А нафига ты меняешь innerHTML? Это же просто текст...

Чем тебе не нравится left в стиле? Работает "как часы".
 document.getElementById('inner_div').style.left = 200 + 'px';

Ты сам же это писал в первом сообщении!!!

Только не 200 указывай, а нужное тебе число.

Спустя 58 минут, 42 секунды (16.03.2010 - 00:22) qpayct написал(а):
sergeiss
innerHTML эт для глазов, а изменение вот тут идёт
obj.left = i + 'px';


glock18, не! ну у меня не на столько ветер в голове..... если мышка попадает в див тогда происходит функция, а если просто стоит внутри дива тогда ничего не происходит, а надо чтоб происходило пока мышка внутри... вот я и попытался типа рекурсию сделать а она не фурычит....

Спустя 21 минута, 48 секунд (16.03.2010 - 00:43) sergeiss написал(а):
Цитата (qpayct @ 16.03.2010 - 01:22)
не! ну у меня не на столько ветер в голове.....

А похоже, что настолько wink.gif Если даже не больше, чем настолько.

Я вот всё думал - догадаешься ты или нет? У тебя же ВСЁ УЖЕ СДЕЛАНО БЫЛО!!! Осталось только догадаться, как это окончательно скомпоновать.
Вот этот код проверь...
function mover(id, event) {
document.getElementById('inner_div').style.left = (event.clientX +20 )+ 'px';
document.getElementById('inner_div').style.top = (event.clientY +20 )+ 'px';
}

Спустя 7 минут, 34 секунды (16.03.2010 - 00:51) qpayct написал(а):
короче либо я вас не понимаю либо вы меня... пойду я спать! утро вечера мудреней wink.gif

Спустя 7 часов, 29 минут, 25 секунд (16.03.2010 - 08:20) Nikitian написал(а):
Цитата (qpayct @ 15.03.2010 - 21:22)
надо чтоб происходило пока мышка внутри... вот я и попытался типа рекурсию сделать а она не фурычит....

Для этих целей вроде как есть метод onmousemove, который срабатывает при каждом перемещении внутри объекта.

Спустя 40 минут, 9 секунд (16.03.2010 - 09:01) sergeiss написал(а):
Цитата (qpayct @ 16.03.2010 - 01:51)
пойду я спать! утро вечера мудреней

Верно подмечено smile.gif Но ты хотя бы просто попробуй последний мой код. Может быть и поймешь...

Цитата (Nikitian @ 16.03.2010 - 09:20)
Для этих целей вроде как есть метод onmousemove

А он и работает с этим методом (см. стартовое сообщение темы). Только "заблудился в 3-х соснах", потому что сам себя запутал.


Спустя 2 часа, 44 минуты, 52 секунды (16.03.2010 - 11:45) qpayct написал(а):
Цитата (Nikitian @ 16.03.2010 - 07:20)
Для этих целей вроде как есть метод onmousemove, который срабатывает при каждом перемещении внутри объекта.

это верно, однако пока мыша находится внутри обьекта без движений, действие приостанавливается. я щас попробую выставить флаг и включать таймер при попадании мыши в обьект. короче щас продолжим вчерашнюю мутку wink.gif только с чистой головой

sergeiss
код я ещё вчера проверил. и без того было понятно, что обьект будет бегать за мышей, а это не совсем то, что мне надо.
там всё чуть-чуть сложнее, надо правильную конструкцию и обработчик сделать, но сначала надо выпить чаю wink.gif

Спустя 4 часа, 1 минута, 6 секунд (16.03.2010 - 15:47) qpayct написал(а):
всё больше и больше полюбляю JavaScript smile.gif хорошая весчь, но не идеальная sad.gif
в общем первая собака убита.

вопервых оказывается события onmousemove и onmouseout работаюь совсем не так, как кажется на первый взгляд...

вот простой пример
function moveIn() {
alert('in');
}
function moveOut() {
alert('out');
}

<div style="width:1000px;height:1000px;border:1px solid black;" onmousemove="moveIn();" onmouseout="moveOut();"></div>


тоесть допустим у нас есть флажок flag, который при наведении мыши надо включать, а при выведении мыши надо выключать. в этой ситуации эти события нам не помогут sad.gif ибо если быстро ввести мышу на территорию элемента сначала выполнится out затем in, а при выводе действие с таймером закончит своё действие несмотря на то, что флажок уже =false после события onmouseout="moveOut();" посему вопрос решён по другому. onmouseout я больше не использую.
<div id="panel" onmousemove="posXY('inpanel', event);" style="width:1000px;height:200px;border:1px solid black;">
<div
id="inpanel" style="width:800px;height:100px;margin: 50px 0 0 100px;overflow:hidden;border:1px solid black;">
<div
id="inner" style="width:40000px;height:100px;position:relative;border:1px solid black;"></div>
</div>
</div>
<div
id="posInOut"></div>

var x = y = 0;
var oLeft = oTop = oWidth = oHeight = 0;

function posXY(id, event) {
x = event.clientX; // мыша Х
y = event.clientY; // мыша У

oLeft = document.getElementById(id).offsetLeft; // начальная координата окна слева
oTop = document.getElementById(id).offsetTop; // начальная координата окна сверху
oWidth = document.getElementById(id).offsetWidth + oLeft; // ширина окна
oHeight = document.getElementById(id).offsetHeight + oTop; // высота окна

if (x > oLeft && y > oTop && x < oWidth && y < oHeight) {document.getElementById('posInOut').innerHTML = 'IN';}
else if (x < oLeft || y < oTop || x > oWidth || y > oHeight) {document.getElementById('posInOut').innerHTML = 'OUT';}
}
вот такая конструкция, если кому интересно

Спустя 28 минут, 42 секунды (16.03.2010 - 16:15) qpayct написал(а):
Цитата (sergeiss @ 16.03.2010 - 08:01)
"заблудился в 3-х соснах"

точно smile.gif

всё намного проще
<div id="panel" onmousemove="getElementById('posInOut').innerHTML='IN'" 
onmouseout="getElementById('posInOut').innerHTML='OUT'"
style="width:1000px;height:200px;border:1px solid black;">
и не лохматить бабушку wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.