JavaScript:移动图像
javascript: moving an image
编辑此页面,供将来阅读此页面的人使用:P
看来我在这里要求太多了..但是非常感谢那些帮助我解决这个问题的人! 其实我想接受你所有的答案,但似乎我只能接受一个..>.>
问题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:
编辑:我用.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在下面"编辑II"部分的评论。
问题3(实际上我在评论:P上问的)
当我尝试使用 document.getElementById('ball').offsetLeft-=1;
设置图像位置时,它显示一个未定义的值。
解决方案(由凯末尔·法迪拉给出):"那是因为你无法设置元素的offsetLeft
值。您必须将新位置值设置为 .style.left
。像这样的东西:element.style.left = new_value + "px";
"
问题4(再次,我在评论:P上问它)
似乎图像不会顺利移动(看起来它突然"扭曲"到另一个地方)。我已经提高了speed
值,但它仍然不起作用。我错过了什么吗?我想知道..:/
解决方案(由凯末尔·法迪拉给出):"将speed
设置为 10 或 20。这应该使动画足够流畅。为了使图像移动得更快,而不是将左偏移量减少 1,请尝试将其减少 3。
document.getElementById('ball').style.left
返回 ''
(或 undefined
),如果在检索之前尚未设置该属性。这就是为什么你从parseInt()
那里得到NaN
.
编辑:
看来你的风格定义是可以的(在你编辑你的帖子之后)。您可以尝试在parseInt()
中使用基数:
alert(parseInt(document.getElementById('ball').style.left,10));
这被记录为不倾斜,但有时使用它会有所帮助。
编辑二
发生这种情况是因为您要执行所有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
,并在delaytime
之后再次执行,这真的是太多的递归......
你应该使用 jQuery,它要容易得多。尝试类似的东西
$(function(){
$("img#ball").offset({top: 10px, left: 500px});
});
更多信息可以在这里找到:
http://api.jquery.com/offset/
有关jQuery的一般信息可以在这里找到:
http://jquery.com/
是在外部样式表中声明的,则无法使用 element.style
来获取 CSS 样式。来自 MDN 文档:
但是,它对于了解元素的样式没有用 常规,因为它仅表示在 元素的内联样式属性,而不是来自样式规则的属性 其他位置,例如部分中的样式规则或外部 样式表。
https://developer.mozilla.org/en/DOM/element.style
相反,您必须使用 window.getComputedStyle()
来获取属性。
window.getComputedStyle(document.getElementById('ball')).left; // returns 500px
这需要offsetLeft
和offsetTop
值,请参阅链接
这篇文章
- 如何阻止图像移动并根据击键进行操作
- Photoshop脚本:将图像移动到位置x,y
- 使大图像移动的jQuery动画更流畅
- 如何通过按住键而不是重复按下来使图像移动
- 织物.js:将剪切的图像移动到固定的剪切蒙版后面
- 灯箱将图像移动到右下角
- 到达容器边界时停止图像移动
- HTML5画布图像移动闪烁
- 如何在修改后将堆叠的图像移动到另一页
- 垂直滚动鼠标时图像移动
- 旋转木马图像移动到不正确的地方点击事件
- 如何在用户滚动页面时触发图像移动
- 为什么我的代码在布朗运动下旋转针图像移动针的位置?为什么原点的图像是分散的?
- JavaScript在使用DOCTYPE时失去图像移动功能
- 如何使用低分辨率的图像移动
- 将图像移动到鼠标的位置
- 如何使用Javascript点击按钮使图像移动
- 将图像移动到指定的最小值
- 如何让标题随着图像移动
- 使JavaScript图像移动时滚动更平滑