jquery页面滚动事件的使用

  在现在更加追加页面加载速度和用户体验的情况下,页面的滚动事件使用的越来越多。通常我们使用滚动事件主要做的事情主要有:

  • ajax异步加载,加快页面首次加载的速度
  • 懒加载(或延迟加载):先把HTML元素放到textarea标签中,或把img的链接先放到一个字段里,页面滚动到某个位置时才进行开始加载
  • 顶部导航或侧边导航的焦点跟踪
  • 侧边数字导航的跟踪(例如百度经验)
  • “回到顶部”功能

  这两天做了一个demo,大家可以参考一下:页面滚动效果

  

  

   上图中指出了用滚动事件实现的功能,不过demo中没有实现异步加载的功能,其实懒加载和异步加载的原理差不多,只不过一个是先把数据请求了只是不加载,一个是滚动到位置了才用ajax请求数据。

  在这里我讲一下这些功能的实现方式:

  1. 顶部导航的焦点追踪

  焦点的追踪,顾名思义:当我们移动到哪个区域时,焦点就移动到哪个导航元素上,指示我们当前查看的是哪个区域。当然,这个功能的前提是我们需要知道每个元素距内容顶部的高度。

// 获取每个item距顶部的高度,$item为区域的综合,listTop用来存储每个区域距顶部的高度
$item.each(function(index, el) {     listTop.push($(el).offset().top); });

  我们从demo中也能看到,当aaaa区域到达顶部时,导航的position变成fixed,然后开始跟踪;滚动条向上滑动,aaaa离开顶部时,导航重新变回原来的样式。其 实,这只是我们看到是这个样子,导航的样式切换来切换去。但实际上我们并不是这样实现的,实际中这是两个导航(O(∩_∩)O~),只不过让其中一个导航 (称为A)不动,另一个导航(称为B)显示隐藏而已,导航B填充导航A的内容即可。在获取了这些item距顶部的高度后,那么我们就在滚动事件中判断,滚 动条的高度是否超过了第一个item的高度,如果超过导航B显示即可,否则导航B隐藏(代码中.navfix即导航B,winTop为滚动条的高度)。

// 是否显示顶部导航
winTop < listTop[0] ? $(".navfix").hide() : $(".navfix").show();

  现在重点来了,导航B显示出来了,那么就需要当前所在的区域和焦点对应上:刚才我们已经获取到每个区域的高度了,现在我们就计算一下滚动条的高度在哪个区间(编号K),计算出区间后,我们就可以给哪个导航元素相应的样式了:

  • winTop<listTop[0]  : 不在任何区域
  • winTop>=listTop[0] && winTop<listTop[1] : 在区域aaaa
  • winTop>=listTop[1] && winTop<listTop[2] : 在区域bbbb
  • winTop>=listTop[2] && winTop<listTop[3] : 在区域ccccc
  • inTop>=listTop[3] : 在区域dddd

// 检测所在区域
for (; i < t; i++) {
    if ( winTop > listTop[t-1] ) {
        k = t-1;
        break;
    }else if ( winTop>=listTop[i-1] && winTop < listTop[i] ) {
        k = i-1;
        break;
    }
}

// 顶部导航效果
if( k > -1 ){
    $li.removeClass("hover");
    $li.eq(k).addClass("hover");
}

  k默认的是-1,即不在任何区域,若k>-1即肯定处在某个区域内,先清除导航中所有元素的样式,然后再指定样式

  2. 侧边数字导航

  其实侧边数字导航与顶部导航实现的原理一样:数字侧边栏也是有两个(跟着区域移动的数字导航A,固定导航B),当某个数字跟着区域移动时,导航 B中相应的数字隐藏;当数字到达顶部时,导航A中的数字隐藏,导航B中的数字显示;即使区域的数字到达顶部不再移动,那也不能立即变成灰色,应当还是绿 色,只有该区域超过窗口上边框才能变成蓝色。这就形成了我们现在看到的效果。

  这里的重点是计算出什么时候隐藏导航A中的数字,显示导航B中的数字,而且导航B的数字显示什么颜色:每次滚动时,都首先让导航A中的数字显 示,导航B的数字隐藏,然后计算每个区域所在的位置,如果某个区域距顶部的高度与滚动条的高度小于了导航B的数字的高度,就说明导航A中的数字该隐藏,导 航B的数字该显示了;那显示的数字呈现什么颜色呢,刚才我们计算出了当前所在区域的编号K,那么区域编号小于编号K都是已经看过的,就显示灰色,否则就是 正在看或者没看的区域就显示绿色。

// 侧边数字导航
$item.find(".item-icon").show();    // 跟着区域移动的数字
$step_a.css("visibility", "hidden");// 固定导航的数字
for(i=0; i<t; i++){
    if(listTop[i]-winTop<i*32+35){
        $item.eq(i).find(".item-icon").hide();
        $step_a.eq(i).css({"visibility":"visible", "background-color": (i<k?"#888":"#008B00") });
    }
}

  3. 懒加载

  通常加载DOM元素时需要对页面进行渲染,耗费时间,那么我们就先把这些DOM元素存储起来,等需要加载的时候再去加载,用来加快页面初始的加载;img图片同理。

// 懒加载底部内容
if( $copyright.attr("loaded")!="loaded" && (winTop+800 > copyTop)){
    var text = $copyright.find("textarea").val();
    $copyright.html(text);

    $copyright.attr("loaded", "loaded");
}

  图片的路径我们可以先放到一个字段中,比如data-src,等需要加载该图片时,则从data-src中取出该值并赋值给src,然后请求图片.

  4. “回到顶部”功能

  “回到顶部”功能,即将scrollTop的值设置为0的过程,如果需要缓冲效果,那么就给它一个缓冲时间

// 回到顶部
$("#backtotop").on("click", function(event) {
    event = event window.event;

    var winTop = $(window).scrollTop();
    $("body").animate({scrollTop:0}, winTop/4);

    event.preventDefault();
});

 5. 其他

  当然,这里还有一些东西没有提到,不过也很重要,比如如何固定滚动条不能移动,回到顶部里的小三角的制作等等;

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索导航
, 懒加载session
, 数字
, 滚动
, 区域
, 高度
, 数字滚动条
, 滚动区域
, 页面顶部
, jquery导航栏样式
, jQuery导航条
, 固定导航条
, 顶部
jquery滚动条加载
jquery 页面滚动事件、jquery 滚动事件、jquery监听滚动事件、jquery 滚动条事件、jquery监听滚动条事件,以便于您获取更多的相关知识。

时间: 2024-09-02 03:33:50

jquery页面滚动事件的使用的相关文章

jquery 页面滚动到底部自动加载插件集合

 很多社交网站都使用无限滚动的翻页技术来提高用户体验,当你页面滑到列表底部时候无需点击就自动加载更多的内容 很多社交网站都使用无限滚动的翻页技术来提高用户体验,当你页面滑到列表底部时候无需点击就自动加载更多的内容.下面为你推荐 10 个 jQuery 的无限滚动的插件:    1. jQuery ScrollPagination   jQuery ScrollPagination plugin 是一个 jQuery 实现的支持无限滚动加载数据的插件.   2. jQuery Screw   Sc

jquery 页面滚动到底部自动加载插件集合_jquery

很多社交网站都使用无限滚动的翻页技术来提高用户体验,当你页面滑到列表底部时候无需点击就自动加载更多的内容.下面为你推荐 10 个 jQuery 的无限滚动的插件: 1. jQuery ScrollPagination jQuery ScrollPagination plugin 是一个 jQuery 实现的支持无限滚动加载数据的插件. 2. jQuery Screw Screw (scroll + view) 是一个 jQuery 插件当用户滚动页面的时候加载内容,是一个无限滚动翻页的插件. 3

jquery页面滚动浮动层智能定位种代码

我看到一个站长博客效果如下 然后我们看到最多的一般是这种 那么我们要如何实现第一种效果呢,问了那朋友说只要搜索 jquery 浮动层就可以解决了,搜索了一下发现几段代码非常的不错,一段是jquery浮动插件,另一种是zblog自带的功能,我都整理一下. 例子1.jquery smartFloat智能定位 HTML代码:  代码如下 复制代码 <div class="float" id="float">     我是个腼腆羞涩的浮动层... </di

jQuery页面滚动浮动层智能定位实例代码_jquery

HTML代码: 复制代码 代码如下: <div class="float" id="float"> 我是个腼腆羞涩的浮动层... </div> JS代码: 复制代码 代码如下: $.fn.smartFloat = function() { var position = function(element) { var top = element.position().top, pos = element.css("position&q

jQuery视差滚动效果网页实现方法经验总结_jquery

本文总结分析了jQuery视差滚动效果网页实现方法.分享给大家供大家参考,具体如下: 首先说两个核心函数,当然是基于jQuery的: 1.$(document).scrollTop() ; 该函数主要是返回页面当前顶部距离页面顶部的像素值,是一个非负整数. 2.$(window).scroll(); 该事件是监控页面是否滚动,一旦滚动则触发其回调函数. 由此两个函数,我们得到下面的代码: $(window).scroll(function() { var top = $(document).sc

jQuery页面加载初始化的3种方法(推荐)_jquery

jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,应该没什么区别,主要看习惯吧,本人觉得第二种方法最好,比较简洁. 第一种: $(document).ready(function(){ alert("第一种方法."); }); 第二种:   $(function(){ alert("第二种方法."); });  第三种: jQuery(function($) { alert("第三种方法."); }); ps; 不用jQu

浅谈Jquery页面初始化的4种方式_jquery

<script src="Scripts/jquery-1.8.2.min.js"></script> <script type="text/javascript"> $(document).ready(function () { alert("第一种方法."); }); $(function () { alert("第二种方法."); }); jQuery(function ($) { a

利用jquery制作滚动到指定位置触发动画_jquery

利用CSS3的 animation 动画特性来完成的,对IE的兼容性不是太好,适用与手机端. <!doctype html> <html> <head> <meta charset="utf-8"> <title>sas</title> <script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.

jQuery结合AJAX之在页面滚动时从服务器加载数据

  这篇文章主要介绍了jQuery结合AJAX之在页面滚动时从服务器加载数据,文中示例服务器端为C#程序,需要的朋友可以参考下 简介 文本将演示怎么在滚动滚动条时从服务器端下载数据.用AJAX技术从服务器端加载数据有助于改善任何web应用的性能表现,因为在打开页面时,只有一屏的数据从服务器端加载了,需要更多的数据时,可以随着用户滚动滚动条再从服务器端加载. 背景 是Facebook促使我写出了在滚动条滚动时再从服务器加载数据的代码.浏览facebook时,我很惊讶的发现当我滚动页面时,新的来自服