2013-05-27 2 views
1

Моя цель - переместить DIV (поле) в пределах BODY с помощью JavaScript. Он состоит из 4 кнопок, каждый из которых перемещает DIV по вертикали и по горизонтали (минус и плюс значения, передаваемые событиями OnClick).Перемещение DIV с JavaScript внутри ограничений BODY

Мой код выглядит следующим образом (он не работает :():

<style> 

#box { 
    z-index: 2; 
    position: absolute; 
    top: 200px; 
    left: 300px; 
    width: 100px; 
    height: 227px; 
    border: none; 
} 

</style> 

<script> 

function moveV(i) { 

    var block, vTop, vNum; 

    block = document.getElementById('box').style; 
    vTop = block.top; 
    vNum = parseInt(vTop); 

    vNum += i; 
    block.top = vNum + "px"; 
} 

</script> 

<input type="button" id="btn1" class="btn" onClick="moveV(-20);"> 
<input type="button" id="btn2" class="btn" onClick="moveH(-20);"> 
<input type="button" id="btn3" class="btn" onClick="moveV(20);"> 
<input type="button" id="btn4" class="btn" onClick="moveH(20);"> 

<div id="box"></div> 

Кроме того, еще одна проблема заключается в том, что я не» я знаю, как остановить его, как только вы достигнете предела тела. Должен ли я помещать его в другой DIV, чтобы границы были «осязаемыми»?

+0

Что CSS правила на DIV? –

+0

Я отредактировал вопрос и добавил запись CSS. – MoeSzislak

ответ

2

Было бы лучше использовать JQuery, кстати с прямым JavaScript это будет:

  • Read the Viewport Height and Width (or like this in jQuery);
  • получить объект, а не стиль (block = document.getElementById('box'));
  • читать block.offsetTop и block.offsetLeft вместо style.top и style.left;
  • перед установкой нового значения, проверьте, что больше 0, и что новое значение PLUS: ширина и высота окна не превышают высоту или ширину видового экрана;
  • установить style.top и style.left как вы делаете, добавив «px»;

> Running Demo

+0

Вы сэром заслуживаете Медаль! Потрясающие! Огромное спасибо! Чем больше я узнаю, тем больше я вижу истинную красоту в кодировании, ну, все остальные, кроме моего кода, но все же ... Суо очень обязан! – MoeSzislak

+0

Добро пожаловать –

1

вы можете использовать JQuery:

function moveV(i) { 
    $("#box").animate({top:"+="+i+"px"}); 
} 
function moveH(i) { 
    $("#box").animate({left:"+="+i+"px"}); 
} 

это работает.

+0

Я до сих пор не знаю даже основ JavaScript, было бы чудом для меня понять jQuery, но спасибо. Тем не менее, я собираюсь обратить внимание на код, на самом деле он кажется намного более понятным и опрятным, чем более крупная версия (JS). – MoeSzislak

+0

@ user1814469, мы настоятельно рекомендуем jQuery, потому что он позаботится обо всех проблемах «под капотом», завернув их в удобный для пользователя интерфейс (например, 'offsetLeft' и' style.left', в jquery просто 'left' в обоих случаях). Говоря, что вы не можете начать с jQuery, потому что вам нужно начинать с прямого JS, это похоже на то, что вы не можете управлять автомобилем с автоматической коробкой передач, потому что вам нужно управлять ручным раньше ... если нужно учиться , да, но не потому, что это проще;) надеюсь, что поможет –

Смежные вопросы