* 简单自定义动画函数
* @param {objec} obj 一个元素对象
* @param {string} pos 表示移动到的目标地点
* @param {number} speed 速度大小,表示每秒移动的像素数,默认为1px/100ms
* @param {function} callback 动画执行完后调用的函数
* @return {[object]} 元素自身,方便链式写法
*/
function ani(obj, pos, speed, callback) {
/* 清除无用的定时器 */
if (obj.move) {
clearTimeout(obj.move)
}
obj.style.position = "absolute"
var speed = speed || 10,
x = parseInt(obj.style.left) || 0,
y = parseInt(obj.style.top) || 0
/* 初始化元素的相关属性值 */
if (!obj.x) {
obj.x = x
obj.y = y
obj.fx = x + pos[0]
obj.fy = y + pos[1]
}
/* 如果元素到达指定位置,则跳出并执行回调函数 */
if (x === (pos[0] + obj.x) &&y === (pos[1] + obj.y)) {
if (typeof callback === "function") {
callback()
}
obj.x = null
obj.y = null
obj.fx = null
obj.fy = null
return obj
}
/* 判断在水平方向上是应该往哪个方向移动 */
if (obj.x <obj.fx) {
if (x <obj.fx) {
obj.style.left = (x + speed) + "px"
}
} else {
if (x >obj.fx) {
obj.style.left = (x - speed) + "px"
}
}
/* 判断在垂直方向上是应该往哪个方向移动 */
if (obj.y <obj.fy) {
if (y <obj.fy) {
obj.style.top = (y + speed) + "px"
}
} else {
if (y >obj.fy) {
obj.style.top = (y - speed) + "px"
}
}
obj.move = setTimeout(function() {
ani(obj, pos, speed, callback)
}, 100)
}
window.onclick = function() {
ani($("#testAni")[0], [100, 0], 5, function() {
ani($("#testAni")[0], [-100, 0],null,function(){
alert("success")
})
})
}
可供参考
你代码写错了,不是innerHtml而是innerHTML,不是offsetleft---是offsetLeft,setInterval使用也错了,正确的js代码如下:
<script language="javascript">window.onload=function()
{
var oDiv=document.getElementById('body1')
var oUl=oDiv.getElementsByTagName('ul')[0]
oUl.innerHTML=oUl.innerHTML+oUl.innerHTML
setInterval(function(){
oUl.style.left=oUl.offsetLeft-2+'px'
},30)
}
</script>