Javascript如何设置间隔时间停止滚动

标签 javascript html

这是 jsfiddle 中的演示,demo

我想要的是让滚动的项目('一','二','三','4','5','6','7')像演示显示的那样自动向上滚动,然后停止2 秒,当它处于中间位置时。但是在我的demo中,它停在中间位置后会晃一会。

这是我演示代码中设置位置的地方。

if ((x == 0) || (x % 35== 0)) {
    setTimeout(function () {
        i.top = x + 'px';
    }, 1000);
} else {
    i.top = x + 'px';
}

谁能帮帮我?谢谢!

更新: 之所以设置35是因为我发现当它等于0,-35,-70,-105,....时滚动的item大概在中间的位置。但是当我console所有x的时候,我发现x 的值介于 (31, -251) 之间。你知道当每个项目都在位置中间时如何找到准确的位置吗?谢谢!

最佳答案

我稍微修改了你的代码,

我设置了一个分配给间隔的变量“k”,我在停止时清除间隔并在超时后再次启动它

我觉得不错 -> http://jsfiddle.net/ato0mf7u/3/ 没有有趣的摇晃了;-D

window.onload = addScrollers;


var i = 1;
var arr = ['one ', 'two', 'three', '4', '5', '6', '7'];
var mid;
var k;
function addScrollers() {

    var txt = arr[0];
    while (i < arr.length) {
        txt += '<p>' + arr[i] + '</p>';
        i++;
    }
    startScroll('myscroller', txt);

}

var speed = 10; // scroll speed (bigger = faster)
var dR = false; // reverse direction

var step = 1;
function objWidth(obj) {

    if (obj.offsetWidth) return obj.offsetWidth;
    if (obj.clip) return obj.clip.width;
    return 0;
}
function objHeight(obj) {

    if (obj.offsetHeight) return obj.offsetHeight;
    if (obj.clip) return obj.clip.height;
    return 0;
}
function scrF(i, sH, eH) {
    var x = parseInt(i.top) + (dR ? step : -step);
    if (dR && x > sH) {
        x = -eH;
    } else if (x < 1 - eH) {
        x = sH;
    }
    //when x is the times of 35, the positio is in middle
    if ((x == 0) || (x % 35== 0)) {
        clearInterval(k);
        setTimeout(function () {
            i.top = x + 'px';
            k = setInterval(function () {

             scrF(i, sH, eH);
             }, 1000 / speed);
        }, 1000);

    }
    else {
        i.top = x + 'px';
    }
    return x;
}
function startScroll(sN, txt) {


    var scr = document.getElementById(sN);
    var sW = objWidth(scr);
    var sH = objHeight(scr);
    scr.innerHTML = '<div id="' + sN + 'in" style="position:absolute; left:3px; width:' + sW + ';">' + txt + '<\/div>';
    var sTxt = document.getElementById(sN + 'in');
    var eH = objHeight(sTxt);

    mid = (eH - sH) / 2;

    sTxt.style.top = (dR ? -eH : sH) + 'px';
    sTxt.style.clip = 'rect(0,' + sW + 'px,' + eH + 'px,0)';


    k = setInterval(function () {

        scrF(sTxt.style, sH, eH);
    }, 1000 / speed);

}

关于Javascript如何设置间隔时间停止滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25871311/

相关文章:

javascript - 未捕获的类型错误 : SpeechRecognition is not a constructor at app. js:5

javascript - 如何在Angular5中获取iframe的内容

html - 单击 Reactjs 渲染 View

javascript - 使用 Css、Html 和 Javascript 创建渐变图 block

javascript - 无法将 Node 应用程序部署到 Openshift

javascript - 根据数组元素更新矩阵

javascript - 将平面数组的人转换为 JavaScript 中的嵌套谱系树

javascript - Date.toLocaleDateString 日期格式问题

php - 如何使用 JavaScript 打印行

html - 图片周围的 CSS 实线边框在平板电脑上不起作用?