滚动时禁用滚动

时间:2015-05-27 15:54:07

标签: javascript css

我正在编写一个代码,它会动画100%body.height的滚动。一切正常,但我试图在动画最后禁用滚动,以防止进一步的不良行为。 我正在使用此代码

function animate(x) {
    var start = new Date();
    var id = setInterval(function (e) {

        var timepassed = new Date() - start;
        var progress = timepassed / x.duration;
        if (progress > 1) {
            progress = 1;
        }
        var delta = x.delta(progress);
        x.step(delta);
        if (progress == 1) {
            clearInterval(id);

        }

    }, x.delay);


}

function fak(e) {
    e.preventDefault();
    return false;
}

function move(e) {
    e.preventDefault();
    var wheel = e.wheelDelta;
    wheel = (wheel == 120) ? "-1" : "1";
    var body_height = document.body.offsetHeight;
    var scrollIt = body_height * wheel;
    var page = window.pageYOffset;
    animate({
        delay: 10,
        duration: 700,
        delta: function (p) {
            return p;
        },
        step: function (delta) {
            window.scrollTo(0, page + (delta * scrollIt));
        }
    });
    return false;
}
document.body.addEventListener("mousewheel", move, false);
document.body.addEventListener("DOMMouseScroll", move, false);

我尝试在鼠标滚轮上分配功能fak,在间隔中分配mousescroll,然后使用

将原始分配恢复到它们
function animate(x) {
    var start = new Date();
    var id = setInterval(function (e) {
    document.body.addEventListener("mousewheel", fak, false);
    document.body.addEventListener("DOMMouseScroll", fak, false);
        var timepassed = new Date() - start;
        var progress = timepassed / x.duration;
        if (progress > 1) {
            progress = 1;
        }
        var delta = x.delta(progress);
        x.step(delta);
        if (progress == 1) {
            clearInterval(id);
  document.body.addEventListener("mousewheel", move, false);
  document.body.addEventListener("DOMMouseScroll", move, false);

        }

    }, x.delay);


}

但也没有工作。现场演示:http://jsfiddle.net/Trolstover/o2pvo2t8/我忽视了什么吗?

1 个答案:

答案 0 :(得分:2)

我改变了你的代码。

http://jsfiddle.net/o2pvo2t8/2/

只需设置一个标志"运行"滚动时(在animate()的开头),并在结束时清除它。 并且仅在没有滚动时执行mov。

希望它有所帮助。

var running;

function animate(x) {
    running = 1;
    var start = new Date();
    var id = setInterval(function (e) {

        var timepassed = new Date() - start;
        var progress = timepassed / x.duration;
        if (progress > 1) {
            progress = 1;
        }
        var delta = x.delta(progress);
        x.step(delta);
        if (progress == 1) {
            clearInterval(id);
            running = 0;
        }

    }, x.delay);


}

function fak(e) {
    e.preventDefault();
    return false;
}

function move(e) {
    e.preventDefault();
    if (running==1) return;
    var wheel = e.wheelDelta;
    console.log(wheel);
    wheel = (wheel == 120) ? "-1" : "1";
    var body_height = document.body.offsetHeight;
    var scrollIt = body_height * wheel;
    var page = window.pageYOffset;
    animate({
        delay: 10,
        duration: 700,
        delta: function (p) {
            return p;
        },
        step: function (delta) {
            window.scrollTo(0, page + (delta * scrollIt));
        }
    });
    return false;
}
document.body.addEventListener("mousewheel", move, false);
document.body.addEventListener("DOMMouseScroll", move, false);