我正在使用此代码:
var s_wrap = document.getElementById('slider');
var s_list = document.getElementById('slider-list');
var li_items = s_list.getElementsByTagName("li");
var next = document.getElementById('next');
var pos, item_w, refreshIntervalId;
next.onclick = function() {
item_w = window.getComputedStyle(li_items[0],null).getPropertyValue("width").split('px')[0];
move('left', li_items[0], 10, item_w);
};
var move = function(direction, el, increment, amount) {
while(pos <= amount){
keep_moving = setInterval(function(){
pos = el.style[direction].split('px')[0];
if(pos == '') pos = 0;
pos = parseInt(pos) + increment;
el.style[direction] = pos + 'px';
}, 100);
}
clearInterval(keep_moving);
};
代码的基本要点是,单击一个div,一次将div向左移动10个像素,直到达到600px。
现在我是以错误的方式解决这个问题吗?
此刻我得到了
Uncaught ReferenceError: keep_moving is not defined
答案 0 :(得分:1)
var move = function(direction, el, increment, amount) {
var keep_moving; // <=============
while(pos <= amount){
keep_moving = setInterval(function(){
pos = el.style[direction].split('px')[0];
if(pos == '') pos = 0;
pos = parseInt(pos) + increment;
el.style[direction] = pos + 'px';
}, 100);
}
clearInterval(keep_moving);
};
虽然我必须说代码对我来说没有多大意义。
答案 1 :(得分:1)
SetInterval重复执行任务。正确的方法是
function move(direction, el, increment, amount) {
var pos = parseFloat(el.style[direction]) || 0;
var repeated = function(){
el.style[direction] = pos + "px";
pos += increment;
if(pos < amount) setTimeout(repeated, 100);
}
repeated();
}
顺便说一句,left
样式属性将其移动到右侧(元素应该从左侧移动多远)
答案 2 :(得分:1)
你是以错误的方式回答你。
您正在产生如此多的间隔,并会迅速杀死您的网页。你应该尝试这样的逻辑:
var move = function(direction, el, increment, amount) {
pos = el.style[direction].split('px')[0];
if(pos == '') pos = 0;
pos = parseInt(pos) + increment;
if(pos > amount) { return; }
el.style[direction] = pos + 'px';
window.setTimeout(function() { move(direction, el, increment, amount); },100);
};