原生js实现公告滚动效果


Posted in Javascript onJanuary 10, 2021

本文实例为大家分享了js实现公告滚动展示的具体代码,供大家参考,具体内容如下

1.html结构

<body>
 <div id="notice" class="notice">
 <ul id="noticeList">
  <li>我是公告1</li>
  <li>我是公告2</li>
  <li>我是公告3</li>
  <li>我是公告4</li>
 </ul>
 </div>
</body>

2.css样式

<style type="text/css">
 body,
 div,
 ul,
 li {
  margin: 0;
  padding: 0;
 }
 
 ul,
 li {
  list-style: none;
 }
 
 .notice {
  width: 300px;
  height: 30px;
  border: 1px solid black;
  text-align: center;
  overflow: hidden;
 }
 
 li {
  padding: 3px;
 }
 </style>

3.js行为

<script type="text/javascript">
 window.onload = function() {
  var notice = document.getElementById("notice");
  var noticeList = document.getElementById("noticeList");
 
  // 获取ul下第一个li元素,好计算li的高度,因为后面滚动的时候每次要滚动一个高度,这里li都是一样高的,
  // 所以获取第一个的高度就行了,不然要遍历获取每一个li的高度。
  var noticeFirstItem = noticeList.querySelector("li");
 
  // 获取li的高度,这里获取的是offsetHeight,关于js各种高度的定义可以注意以下
  var scrollHeight = noticeFirstItem.offsetHeight;
  // 是否可以进行动画
  var opt = {
  animated: true,
  interval: 1000
  };
 
  notice.onclick = function() {
  // 动画之前首先重置
  // noticeFirstItem.style.transition = "";
  noticeFirstItem.style.marginTop = 0;
  if (opt.animated) {
   opt.animated = false;
   animate(noticeList, scrollHeight, opt);
  }
  };
 };
 
 // 动画函数,obj——要产生动画的对象,sHeight——每次要滚动的距离,interval——多久滚动一次
 function animate(obj, sHeight, option) {
  // 当滚到最后一条公告的时候就不用动画了。
  var stopHeight = sHeight - obj.scrollHeight;
  var marginTopNum = 0;
  var timer = setInterval(function() {
  marginTopNum -= sHeight;
  obj.style.marginTop = marginTopNum + "px";
  obj.style.transition = "margin-top 1.5s ease";
  // 注意这里的比较符号,前面得到的高度都进行四舍五入了
  if (marginTopNum <= stopHeight) {
   clearInterval(timer);
   // option.animated = true;
  }
  }, option.interval);
 }
 </script>

4.运行结果

原生js实现公告滚动效果

动画在进行中时注意控制不能进行其他动画!

结束语:不要把动画想得很难,当你想实现复杂的动画时,比如jquery的animate方法,你可以先实现针对一个属性的动画,然后再想办法扩展到多个属性(即以对象方式去传参,然后遍历对象中的每个样式属性,然后给每个样式属性添加动画)。以前都是用js去实现每一帧每一帧的移动,即在肉眼无法反应过来的时间里产生移动,这样就能产生连续移动的效果,现在css3出来了,可以方便的利用css3来实现过渡效果了,而不用复杂的js来实现了。这个真的太棒了。

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

Javascript 相关文章推荐
JavaScript 应用技巧集合[推荐]
Aug 30 Javascript
讨论javascript(一)工厂方式 js面象对象的定义方法
Dec 15 Javascript
Prototype源码浅析 Enumerable部分之each方法
Jan 16 Javascript
javascript时区函数介绍
Sep 14 Javascript
JQuery选择器、过滤器大整理
May 26 Javascript
jQuery循环遍历子节点并获取值的方法
Apr 14 Javascript
js实现文字向上轮播功能
Jan 13 Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 Javascript
JavaScript字符集编码与解码详谈
Feb 02 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 Javascript
详谈DOM简介及节点、属性、查找节点的方法
Nov 16 Javascript
详解JavaScript类型判断的四种方法
Oct 21 Javascript
微信小程序实现文字无限轮播效果
Dec 28 #Javascript
小程序实现左右来回滚动字幕效果
Dec 28 #Javascript
原生JS实现的自动轮播图功能详解
Dec 28 #Javascript
jQuery实现的自定义轮播图功能详解
Dec 28 #jQuery
微信小程序实现简单跑马灯效果
May 26 #Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 #Javascript
详解puppeteer使用代理
Dec 27 #Javascript
You might like
PHP+javascript模拟Matrix画面
2006/10/09 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
在每个匹配元素的外部插入新元素的方法
2013/12/20 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
微信小程序使用第三方库Underscore.js步骤详解
2016/09/27 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
Vue记住滚动条和实现下拉加载的完美方法
2020/07/31 Javascript
在vue中封装方法以及多处引用该方法详解
2020/08/14 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
Python实现抓取城市的PM2.5浓度和排名
2015/03/19 Python
python创建临时文件夹的方法
2015/07/06 Python
python结合API实现即时天气信息
2016/01/19 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
使用Python操作excel文件的实例代码
2017/10/15 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
Python用户自定义异常的实现
2020/12/25 Python
购买一个高级域名:BuyDomains
2018/03/11 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
2015年学校减负工作总结
2015/05/19 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
重阳节座谈会主持词
2015/07/03 职场文书
python实现socket简单通信的示例代码
2021/04/13 Python