javascript - 计时器上的高度值未正确更新

标签 javascript setinterval timing

我通过更新计时器函数(setInterval)内的跨度元素的高度创建了一个进度表。仪表将在悬停时暂停,然后在失去焦点(取消悬停)时继续。问题在于,恢复时高度会下降一两个像素,而不是从之前的高度继续。我无法弄清楚为什么会发生这种情况,因为传递到计时器函数的值是正确的。有什么想法吗?

这是一个stripped-down demo .

有问题的 JavaScript 是:

function runFlipMeter(meter){
//if meter not defined
if(!meter){
    meter = 0;
}

flipMeter = setInterval(function(){

    if(meter === 0){
        //meter at 0
        grow = true;
        $('.cube').toggleClass('flip');
    }
    else if(meter === 100){
        //reached the top, go back up
        grow = false;
        $('.cube').toggleClass('flip');
    }

    //update meter
    $('#flipperTimer span').height(meter + '%');
    //increment meter
    meter = !grow ? meter-1 : meter+1;

}, 50);

}//end runFlipMeter

最佳答案

问题是,当您在函数 pauseFlipMeter 中运行 meter = $('#flipperTimer span').height(); 时,您会得到一个 meter px 的数量,而不是百分比数字。

See on Codepen

var flipMeter; //defined globally so it can be paused/cleared
var grow = false;

function runFlipMeter(meter) {
    //if meter not defined
    if (!meter) {
        meter = 0;
    }

    flipMeter = setInterval(function() {

        if (meter === 0) {
            //meter at 0
            grow = true;
            $('.cube').toggleClass('flip');
        } else if (meter === 100) {
            //reached the top, go back up
            grow = false;
            $('.cube').toggleClass('flip');
        } else if (meter.toString().indexOf('px') > -1) {
            meter = Math.ceil((parseInt(meter, 10) / $('#flipperTimer').height()) * 100);
        }

        //update meter
        $('#flipperTimer span').height(meter + '%');
        //increment meter
        meter = !grow ? meter - 1 : meter + 1;

    }, 50);

} //end runFlipMeter

function pauseFlipMeter() {
    var meter;
    $('#resultsFlipper').hover(function() {
        //pause the meter
        window.clearInterval(flipMeter);
        meter = $('#flipperTimer span').height();

    }, function() {
        //resume the meter
        runFlipMeter(meter + 'px');
    });
}



runFlipMeter();

pauseFlipMeter();

关于javascript - 计时器上的高度值未正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25678651/

相关文章:

Javascript 性能 : Fastest way of building and injecting html

jquery - 如何通过这个简单的幻灯片放映在 jquery 中使用时间间隔

javascript - 什么是更新表的修改内容字段并将其显示给用户的理想时间?

javascript - 每 10 秒执行一次代码,但也从 0 秒开始

Javascript 在 for 循环中设置超时函数

c - C 语言定时程序

c++ - 不同计算机上的时钟时序变化

Javascript 制作元素

javascript - 正则表达式查找字符串上的最后一个标记

javascript - 有没有其他方法可以避免 Angular 1 中的 $timeout