原生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 避免闭包引发的问题
Mar 17 Javascript
JAVASCRIPT style 中visibility和display之间的区别
Jan 22 Javascript
jQuery实现可拖动的浮动层完整代码
May 27 Javascript
JS比较两个数值的大小实例
Nov 25 Javascript
js简单正则验证汉字英文及下划线的方法
Nov 28 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
Apr 03 jQuery
vue监听scroll的坑的解决方法
Sep 07 Javascript
JavaScript实现数字前补“0”的五种方法示例
Jan 03 Javascript
AJAX在JQuery中的应用详解
Jan 30 jQuery
解决vue addRoutes不生效问题
Aug 04 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
Dec 14 Vue.js
微信小程序实现文字无限轮播效果
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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
js中javascript:void(0) 真正含义
2020/11/05 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
2018/01/18 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
python同时给两个收件人发送邮件的方法
2015/04/30 Python
理想高通滤波实现Python opencv示例
2019/01/30 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
Python3.5局部变量与全局变量作用域实例分析
2019/04/30 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
解决jupyter notebook 出现In[*]的问题
2020/04/13 Python
印尼网上商店:Alfacart.com
2019/03/11 全球购物
转党组织关系介绍信
2014/01/08 职场文书
日本语毕业生自荐信
2014/02/01 职场文书
工程管理英文求职信
2014/03/18 职场文书
新员工入职欢迎词
2015/01/23 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书