先讲思路:
1.设定基本样式:两个p,一个为父级,区域高度小,一个子级,区域高度大,对父级区域设置overflow:hidden;溢出部分隐藏;在子级区域可以设p,图片。
2.使用jQuery,先引入jQuery包,在script中定义方法,获取父级区域的id.(或者class、标签)使用jquery中的方法:$(“#id”).scrollTop(i),对scrollTop的值设置成变量i,我们就要围绕着变量做文章。还需要用到js中的定时器,用周期定时器做循环操作。
3.具体要实现的效果:
①让子区域的图片或文字向上动,即垂直滚动条向下划,滑动的速度
②滚动条不可能无限下滑,所以必须设置条件判断
③具体到滑动到某区域的停顿时间,
具体的思路就是这样,写到后面具体补充
代码实现:
1.实现样式(父区域all,子区域text)
<body> <!--父区域all开始--> <p class="big"> <!--子区域开始--> <p id="small"> <p class="blue"> </p> <p class="red"> </p> </p> <!--子区域结束--> </p> <!--父区域结束--> </body>
css样式:
<style type="text/css"> *{ margin: 0 auto; padding: 0; } //父区域 .big{ width: 550px; height: 50px; border: 1px solid red; overflow: scroll;//可以看到滚动条 //overflow:hidden;滚动条隐藏 } //子区域 #small{ width: 550px; height: 100px; /*border: 1px solid blue;*/ } .blue{ width: 550px; height: 50px; background-color: blue; } .red{ width: 550px; height: 50px; background-color: red; } </style>
查看效果:有一个蓝色p和滚动条,向下滑动滚动条可以看到红色p

2.使用jQuery代码,实现蓝色p和红色p循环交替
①实现滚动条向下滑动:
<script type="text/javascript"> //定义初始值i=0的全局变量 var i=0; //设定一个定时器,调用showUp()函数,每0.05秒调用一次,形成一个循环 var timer=setInterval(showUp,50); //定义一个滚动条向下滑动的方法,即p向上滑动 function showUp(){ //对变量i进行叠加 i++; //取得父区域的类名,同时调用滚动条向下滑动的方法,scrollTop(), //对它的值设置为变量i $(".big").scrollTop(i); //设定定时器的条件,当滚动条达到底部时,清除定时器,让它停止 if(i>=37){ //清除定时器 clearInterval(timer); } } </script>
这是效果是蓝色p滑动到红色p结束。这里只是实现了一次蓝转红的翻滚。
还没有做到循环滚动。
②循环滚动;为什么没有做到循环滚动呢?只要是在于if判断语句,上面的代码是当i>=37时,周期定时器timer就直接被清除了,就直接停了。让周期定时器重新启动,不就可以继续循环了,同时要注意把i的值重新赋值为0
if(i>=37){ //清除定时器 clearInterval(timer); //i重新赋值为0 i=0; //重新调用周期定时器 timer=setInterval(showUp,100); }
好做到这里,我们发现可以做完了循环效果了,是不是结束了呢,但是仔细看效果你会发现,在蓝变红和红变蓝对比,发现红变蓝的速度明显要快,而且很突兀,没有这种蓝变红的渐变速度,而是突然红就转到蓝了,这是什么原因呢? 嗯,这是我们的代码有问题,要优化一下。问题在哪?还是在if条件上,在条件上是当i>=50的时候,直接就给i=0;这是造成这种突兀的根本原因。