javascript - 使用 jQuery 移动到网站的各个部分 `.scroll()`

标签 javascript jquery animation scroll

我试图在 jQuery 中创建一个简单的效果,当用户向下滚动页面时,“ Pane ”会自动动画进入 View (这样用户就不必自己一直向下滚动)。

这很难解释,所以这里是例子: http://jsfiddle.net/naxb22q3/1/

如您所见,当您向下滚动经过蓝色 Pane 几个像素时,会显示绿色 Pane 。但是,我当前拥有的代码使得一旦显示绿色 Pane ,您就无法再向上或向下滚动。您必须重新加载页面才能使其再次工作。

理想情况下,用户可以向上或向下滚动并且动画可以工作。

HTML:

<div class="pane bgBlue"></div>
<div class="pane bgGreen"></div>
<div class="pane bgRed"></div>

CSS:

.pane {
    height: 1000px;
    width: 100%;
}
.bgBlue {
    background-color: blue;
}
.bgGreen {
    background-color: green;
}
.bgRed {
    background-color: red;
}

JavaScript:

/**
 * Lock scroll position for each pane
 * as the user scrolls down.
 */
$.fn.scrollView = function () {
    return this.each(function () {
        $('html, body').animate({
            scrollTop: $(this).offset().top
        }, 1250);
    });
}


// Variables
var windowHeight = $(window).height();
var headerHeight = $('.siteHeader').outerHeight();
var paneHeight = windowHeight - (headerHeight / 2);


// `.scroll()` function
$(window).scroll(function () {
    height = $(window).scrollTop();

    if (height > 5) {
        $('.pane.bgGreen').scrollView();

        //$(this).off('scroll');
    }


    // After we scroll past the green pane,
    // the red pane is shown (via the same animation)
    if (height > (paneHeight * 2)) {
        $('.pane.bgRed').scrollView();
    }
});

最佳答案

粗略的解决方案,但一个开始 - http://jsfiddle.net/bkseqsu4/

Javascript:

// Variables
var windowHeight = $(window).height();
var headerHeight = $('.siteHeader').outerHeight();
var paneHeight = windowHeight - (headerHeight / 2);
var scrollLock = 0;
var paneIndex = 0;
var lastScroll = 0;
var panes = ['.pane.bgBlue', '.pane.bgGreen', '.pane.bgRed'];

/**
 * Lock scroll position for each pane
 * as the user scrolls down.
 */
$.fn.scrollView = function() {
  this.each(function() {
    $('html, body').animate({
      scrollTop: $(this).offset().top
    }, 1000, "swing", function() {
      setTimeout(function() {
        scrollLock = 0;
        var currentPosition = $(this).scrollTop();
        lastScroll = currentPosition;
      }, 100);

    });

  });
}

// `.scroll()` function
$(window).scroll(function() {

  if (scrollLock == 0) {
    var currentPosition = $(this).scrollTop();
    if (currentPosition > lastScroll) {
      paneIndex = paneIndex + 1;
    } else {
      paneIndex = paneIndex - 1;
    }

    scrollLock = 1;
    $(panes[paneIndex]).scrollView();
  }

});

关于javascript - 使用 jQuery 移动到网站的各个部分 `.scroll()`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789017/

相关文章:

javascript - jQuery - <option> 被添加到 <select> 内部和之后

javascript - 单击任意位置以关闭 react 中的下拉菜单

ios - 在 iOS 中暂停和恢复动画的问题

iOS:按钮的动画减速

javascript - 在 Javascript 中引用另一个包含 'this' 引用的函数

javascript - 如何使用JQuery PrettyDate插件?

javascript - 直接 JSON.stringify Javascript 对象是一个好习惯吗?

javascript - 如何通过父 id-s 加深数组 (JavaScript)

jquery - 替换 cycle2.js 中的 <img> 标签

swift - 将图像调整为初始大小