JS实现滚动条自动滚动(scrollTop)

  • js部分很简单:通过控制scrollTop的值来实现自动滚动效果;
  • 注意(重点):
    • 1、scrollTop的值不可以加单位,谨记;
    • 2、网页缩放比例会影响效果实现(下面具体说);
    • 3、如果这个元素没有被溢出,scrollTop为0;
    • 4、设置的scrollTop值小于0,则scrollTop的值为0;
    • 5、如果设置scrollTop的值超出了这个容器滚动的值,则scrollTop的值为容器最大值。
    • <script>
      	roll: function () {
      		// 获取父盒子(肯定有滚动条)
      		var parent = document.getElementById('parent');
      		// 获取子盒子(高度肯定比父盒子大)
      		var child1 = document.getElementById('child1');
      		var child2 = document.getElementById('child2');
      		// 第一个子盒子内容复制一遍给第二个子盒子,产生循环视觉,辅助作用
      		// 可以注释下这条代码,看会出现什么情况
      		child2.innerHTML = child1.innerHTML;
      		// 设置定时器,时间即为滚动速度
      		setInterval(function () {
      			if(parent.scrollTop >= child1.scrollHeight) {
         				parent.scrollTop = 0;
      			} else {
         				// 如果存在网页缩放,很有可能没有效果,但是else部分的代码会执行
         				// 原因:刚才讲到的scrollTop三个注意中标黄的一条
         				// 设置scrollTop的值小于0,即scrollTop被设为0
         				// 可以缩放跑一下,然后不刷新的状态下恢复百分之百跑一下,再缩放,打印scrollTop的值
         				// 你会发现正常尺寸执行时打印的第一个值不是加法,而是减法,即scrollTop++增加负值
         				// 这样的话就对应上了scrollTop的注意点了,增加的值小于0,就被设为0
         				parent.scrollTop++;
      			}
      		}, 20);
      	}
      </script>
      
  • 滚动条Demo
    • <!DOCTYPE html>
      <html lang="en">
      <head>
      	<meta charset="UTF-8" />
          <title>autoScroll</title>
      	<style>
      		.parent {
      			width: 300px;
      			height: 200px;
      			margin: 0 auto;
      			background: #242424;
      			overflow-y: scroll;
      		}
      		/*设置的子盒子高度大于父盒子,产生溢出效果*/
      	    .child {
      			height: auto;
      		}
      		.child li {
      			height: 50px;
      			margin: 2px 0;
      			background: #009678;
      		}
      	</style>
      </head>
      <body>
      	<div id="parent" class="parent">
      		<ul id="child1" class="child">
          		<li>1</li>
          		<li>2</li>
          		<li>3</li>
          		<li>4</li>
          		<li>5</li>
      		</ul>
      		<div id="child2" class="child"></div>
      	</div>
      </body>
      <script type="text/javascript">
      	roll:function () {
          	var parent = document.getElementById('parent');
          	var child1 = document.getElementById('child1');
          	var child2 = document.getElementById('child2');
          	child2.innerHTML = child1.innerHTML;
          	setInterval(function () {
             		if(parent.scrollTop >= child1.scrollHeight) {
                 		parent.scrollTop = 0;
             		} else {
                 		parent.scrollTop++;
                  }
          	}, 20);
      	}
      </script>
      </html>
      
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值