2012-04-16 4 views
1

редактирование этой страницы для тех, кто хочет читать это в будущем: PJavaScript: перемещение изображения

кажется, я прошу слишком много здесь .. но спасибо тем, кто помогает мне с этим проблема! на самом деле я хочу, чтобы принять все ваш ответ, но мне кажется, я только может принять один ..>>

Вопрос 1:.
я хочу, чтобы переместить изображение, но когда я пытаюсь получить положение изображения (с использованием document.getElementById().style.left), это показывает мне значение NaN, когда я конвертирую его в целое. Интересно, как это исправить:/

вот мой код:

<script type="text/javascript"> 

    function playit() 
    { 
     alert(parseInt(document.getElementById('ball').style.left)); <!-- shows a NaN value --> 
    } 
</script> 

я поместить изображение в таблицу и вызвать его с помощью функции OnClick; <td id="frame" colspan="5" onclick="playit()"> быть точным и я объявил образ как это: <img src="play/ball.png" id="ball" name="ball"/>

вот мой CSS для изображения:

#ball 
{ 
    position:absolute; 
    top:500px; 
    left:500px; 
} 

РАСТВОР (задается VIPIN JAIN): использование .offsetLeft вместо element.style.left




Вопрос 2:
EDIT: Я установил его с помощью .offsetLeft, и он отлично работает. теперь, когда я пытаюсь переместить изображение, я получил еще одну ошибку. Говорят, что я использую слишком много рекурсии. Я знаю, что это происходит, потому что я использую рекурсию, но мне интересно, что случилось с использованием рекурсии?

вот мой код:

<script type="text/javascript"> 

    <script type="text/javascript"> 

    var lball = document.getElementById('ball').offsetLeft; 
    var speed = 500; 

    function moveleft() 
    { 
     if(document.getElementById('ball').offsetLeft >0) 
     { 
      document.getElementById('ball').offsetLeft-=1; 

      setTimeout(moveleft(), speed); 
     } 
     else gameover(); 
    } 
    function playit() 
    { 
     score = 0; 
     setTimeout(moveleft(), speed); 
    } 
</script> 

может кто-то помочь мне с этим? спасибо :)

РАСТВОР (задается Teemu):пожалуйста, обратитесь к Teemu's comment ниже на 'Edit II' часть.


Вопрос 3 (на самом деле я спрашиваю его о комментариях: P)
, когда я попытался установить положение изображения с помощью document.getElementById('ball').offsetLeft-=1;, он показывает неопределенное значение.

РАСТВОР (задается Kemal Fadillah): «Это потому, что вы не можете установить значение элемента Вы должны установить новое значение позиции для .style.leftoffsetLeft..Что-то вроде этого: element.style.left = new_value + "px"; "


Вопрос 4 (опять же, я спрашиваю его о комментариях: P)
, кажется, что изображение не будет двигаться плавно (он выглядит ..? это вдруг «перекосы» в другое место) я поднял значение speed, но она по-прежнему не работает, я упускаю что-то с ним я интересно ..:/

решения (дается Kemal Fadillah): " Установите speed на 10 или 20. Th при этом анимация должна быть достаточно гладкой. Для того, чтобы сделать шаги изображения быстрее, вместо уменьшения левого сдвига на 1, попробуйте уменьшить его на 3.»

+1

Если свойство CSS 'left' не установлено,' document.getElementById ('ball'). Style.left' вернет пустую строку. И если вы передадите пустую строку в 'parseInt()', она даст вам «NaN». –

+0

@KemalFadillah Я использую его в CSS. вот мой CSS для мяча: #ball { \t позиция: абсолютная; \t верх: 500px; \t Слева: 500 пикселей; \t } – aquatorrent

+0

@KemalFadillah Это может быть проблема с несколькими браузерами. IE смиренно дает мне все значения стиля, определенные во внешних таблицах стилей. – Teemu

ответ

1

document.getElementById('ball').style.left возвращает '' (или undefined), если вы не установите свойство перед извлечением его. Вот почему вы получаете NaN от parseInt().

Edit:

Кажется, вы определение стиля в порядке (после того, как вы редактировали ваше сообщение). Вы можете попробовать использовать десятичную в parseInt():

alert(parseInt(document.getElementById('ball').style.left,10)); 

Это задокумен не косые, но использование его иногда помогает.

Edit II

Это происходит потому, что вы выполнение всех setTimeout ей в два раза, и вы их не очищая. Попробуйте это следующим образом:

var delay; 

function moveLeft(){ 
    : 
    if(delay){ // Add this if before all of your setTimeout() calls and in gameover() too 
    clearTimeout(delay); 
    } 
    delay=setTimeout(moveLeft, speed); 
    : 
} 

Установив тайм-аут, как это setTimeout(doFunction(),delaytime); выполняет doFunction rightaway из-за (), и снова после delaytime, что на самом деле слишком много рекурсии ...

+0

Я пробовал, и он тоже не работает; он все еще показывает значение NaN. Интересно, что означает radix:/ – aquatorrent

+0

@aquatorrent Я не уверен, могу ли я объяснить это на английском языке, но ... Когда вы используете «16» в качестве основателя, вы получите шестнадцатеричное значение, ll используйте '2' в качестве радиуса, вы получите двоичное значение и т. д. Например:' parseInt ('100', 2) 'возвращает' 4', поскольку 'parseInt ('100', 10)' возвращает '100' , – Teemu

+0

ой, значит, это как преобразование целого числа в другой тип целого? – aquatorrent

1

Вы должны использовать JQuery, это гораздо проще. Попробуйте что-то вроде

$(function(){ 
$("img#ball").offset({top: 10px, left: 500px}); 
}); 

Более подробной информации можно можно найти здесь:

http://api.jquery.com/offset/

информация о JQuery вообще можно найти здесь:

http://jquery.com/

+0

Я еще не научился jQuery, и мне сказали сделать это с помощью javascript .. :( – aquatorrent

+0

Вам нужно что-то начать, это может быть ваш шанс! И jQuery также является javascript, поэтому это не должно быть проблемой :-) –

+0

О, правда? возможно, я постараюсь сделать это, как только я закончил это с помощью javascript: D – aquatorrent

1

Это требует offsetLeft и offsetTop значения, пожалуйста, обратитесь к ссылке

This post

1

Вы не можете получить CSS стиль, используя element.style, если он объявлен во внешней таблице стилей. От MDN Документация:

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

https://developer.mozilla.org/en/DOM/element.style

Вместо этого, вы должны будете использовать window.getComputedStyle(), чтобы получить свойства.

window.getComputedStyle(document.getElementById('ball')).left; // returns 500px 
+0

спасибо, он работает! теперь я пытаюсь установить значение переменной. но это не сработает. не могу ли я использовать parseInt() для его анализа? вот как я это делаю: var ball = parseInt (window.getComputedStyle (document.getElementById ('ball'))); – aquatorrent

+0

вы забыли '.left' в конце вызова' window.getComputedStyle() '. –

+0

Я добавляю '.left', как вы сказали ранее, но это дает мне неопределенное значение. это так? 'var lball = parseInt (window.getComputedStyle (document.getElementById ('ball')). left);' – aquatorrent

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