jQuery实现根据滚动条位置加载相应内容功能


Posted in Javascript onJuly 18, 2016

实现jQuery根据滚动条位置加载相应的内容:向下滚动时当内容区域滚动到可视窗口高度的一半时,加载动画内容;向上滚动到相应的内容区域时也重新加载动画内容!

1.实现思路:

先静态布局好HTML结构,使用伪类:hover模拟动画效果,再使用jQuery 控制动画类名的切换来实现效果!主要判断滚动的方向,以及相应方向上加载动画的时机(即何时才加载动画的判断条件!关键点!)。

2.思维草稿图:

向下滚动加载动画判断条件:(代码中addClass()函数)

jQuery实现根据滚动条位置加载相应内容功能

向上滚动加载动画判断条件:(代码中addClass2()函数)

jQuery实现根据滚动条位置加载相应内容功能

3.代码实现:

HTML:

<div class="header">
 实现思路:先布局好静态布局,再使用hover模拟动画行为,再改为类名on等用js进行控制!
 </div>
 <div class="banner">
 <h1>前端开发</h1>
 <p>
 Web前端开发是从网页制作演变而来的,名称上有很明显的时代特征。在互联网的演化进程中,
 网页制作是Web1.0时代的产物,那时网站的主要内容都是静态的,用户使用网站的行为也以
 浏览为主。
 </p>
 </div>
 <div class="con">
 <div class="con_l"><img src="images/1.jpg" alt="" /></div>
 <div class="con_2"><img src="images/2.jpg" alt="" /></div>
 </div>
 <div class="news">news</div>
 <div class="footer">footer</div>

CSS:

*{margin:0px;padding:0px;}//粗暴地清除默认边距
body{
 font-family:"Arial Microsoft Yahei";
 font-size:16px;
 font-weight:bold;
}
.header{
 width:100%;height:500px;
 background-color: #10E668;
}
.banner{
 width:100%;height:600px;
 background:#F7CF3B;
 text-align: center;
 margin:30px auto;
 overflow: hidden;

}
.banner h1{
 font-size:30px;
 padding:50px 0;
 position:relative;
 top:400px;
 transition:all 0.3s 0.3s linear;
}
.banner p{
 font-size:18px;
 width:80%;
 margin:30px auto;
 line-height: 1.8em;
 text-align: left;
 text-indent:2em;
 position:relative;
 top:400px;
 transition:all 0.5s 0.5s linear;
}
//动画类
.banner.on h1,.banner.on p{
 top:0px;
}

.con{
 width:80%;height:720px;
 background:#508E5A;
 margin:20px auto;
 overflow: hidden;
}
.con img{
 width:400px;height:auto;
}
.con_l{
 float: left;
 position:relative;
 left:-400px;
 transition:all 0.3s 0.3s linear;
}
.con_2{
 float: right;
 position:relative;
 right:-400px;
 transition:all 0.3s 0.3s linear;
}
//动画类
.con.on .con_l{
 left:0;
}
.con.on .con_2{
 right:0;
}
.news{
 width:100%;height:600px;
 background:#CA3400;
}
.footer{
 width:100%;height:600px;
 background-color: #ccc;
}

jQuery:

$(function(){
 /*version 0.1.0 函数封装*/
 //向下滚动时
 function addClass(ele){
 var winH=$(window).height()*0.5;//可视窗口的高度的一半,更改0.5可以调整滚动到底部、中部、顶部时候开始加载
 var top=$(window).scrollTop();//可视窗口的滚动高度
 var ele_t=$(ele).offset().top;//内容区的top
 var ele_h=$(ele).height();//内容区的高

 //判断条件,看草稿图1!
 if(top<ele_t-winH){
 $(ele).removeClass('on');
 }else if((top>ele_t-winH)&&(top<ele_t+ele_h)){
 $(ele).addClass('on');
 }else{
 $(ele).removeClass('on');
 }
 }
 //向上滚动时,看草稿图2!
 function addClass2(ele){
 var winH=$(window).height()*0.5;//更改0.5可以调整滚动到底部、中部、顶部时候开始加载
 var top=$(window).scrollTop();//可视窗口的滚动高度
 var ele_t=$(ele).offset().top;//内容区的top
 var ele_h=$(ele).height();//内容区的高

 //判断条件
 if(top>ele_t+ele_h){
 $(ele).removeClass('on');
 }else if((top<ele_t+ele_h)&&(top>ele_t-winH*2)){
 $(ele).addClass('on');
 }else{
 $(ele).removeClass('on');
 }
 }
 //获取前一次的滚动高度(这里是第一次)
 var firstTop=$(window).scrollTop();

 $(window).scroll(function(){
 //每次滚动重新获取滚动高度
 var lastTop=$(this).scrollTop();
 //后一次滚动高度大于前一次滚动高,说明向下滚动,否则想上滚动!
 if(lastTop>firstTop){
 //加载对应的内容区域
 addClass('.banner');
 addClass('.con');
 }else{
 addClass2('.banner');
 addClass2('.con');
 }
 //每次都将后一次的滚动高度赋值给前一次的滚动高度
 firstTop=lastTop;
 });
});

4.总结:

这种效果用于模拟滚动加载动画内容,重难点在于判断滚动的方向、相应滚动方向上加载动画时候的判断条件,感觉逻辑还是有待提升的!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 Javascript
JavaScript基础语法让人疑惑的地方小结
May 23 Javascript
JS图片根据鼠标滚动延时加载的实例代码
Jul 13 Javascript
jQuery使用元素属性attr赋值详解
Feb 27 Javascript
ECMAScript中函数function类型
Jun 03 Javascript
Javascript实现字数统计
Jul 03 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
Feb 19 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
Apr 25 jQuery
React Native 搭建开发环境的方法步骤
Oct 30 Javascript
浅谈React Native Flexbox布局(小结)
Jan 08 Javascript
jquery应用实例分享_实现手风琴特效
Feb 01 jQuery
vue-cli3访问public文件夹静态资源报错的解决方式
Sep 02 Javascript
JS HTML5拖拽上传图片预览
Jul 18 #Javascript
jQuery 操作input中radio的技巧
Jul 18 #Javascript
JS HTML5实现拖拽移动列表效果
Aug 27 #Javascript
浅谈$('div a') 与$('div&gt;a')的区别
Jul 18 #Javascript
浅析JavaScript中的array数组类型系统
Jul 18 #Javascript
基于jQuery.validate及Bootstrap的tooltip开发气泡样式的表单校验组件思路详解
Jul 18 #Javascript
javascript时间差插件分享
Jul 18 #Javascript
You might like
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
javascript引用对象的方法
2007/01/11 Javascript
基于jQuery的js分页代码
2010/06/10 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
使用jQuery的easydrag插件实现可拖动的DIV弹出框
2016/02/19 Javascript
分享jQuery封装好的一些常用操作
2016/07/28 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
form表单转Json提交的方法(推荐)
2016/09/23 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
python开发之str.format()用法实例分析
2016/02/22 Python
PyTorch搭建一维线性回归模型(二)
2019/05/22 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
PyTorch实现AlexNet示例
2020/01/14 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
微博营销计划书
2014/01/10 职场文书
高中生旷课检讨书
2014/10/08 职场文书
数学教师求职信范文
2015/03/20 职场文书
同意报考证明
2015/06/17 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技