原生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 相关文章推荐
地震发生中逃生十大法则
May 12 Javascript
修改好的jquery滚动字幕效果实现代码
Jun 22 Javascript
javascript中length属性的探索
Jul 31 Javascript
JavaScript将页面表格导出为Excel的具体实现
Dec 27 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
May 12 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
Oct 22 Javascript
jQuery Html控件基本操作(日常收集整理)
Mar 11 Javascript
遍历json获得数据的几种方法小结
Jan 21 Javascript
基于node下的http小爬虫的示例代码
Jan 11 Javascript
JS实现的透明度渐变动画效果示例
Apr 28 Javascript
基于jQuery ztree实现表格风格的树状结构
Aug 31 jQuery
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
Dec 23 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 Array交叉表实现代码
2010/08/05 PHP
非常好用的两个PHP函数 serialize()和unserialize()
2012/02/04 PHP
php无限极分类实现的两种解决方法
2013/04/28 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
快速掌握Node.js之Window下配置NodeJs环境
2016/03/21 NodeJs
浅析javascript中的Event事件
2016/12/09 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
python简单图片操作:打开\显示\保存图像方法介绍
2017/11/23 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
HTML5对手机页面长按会粘贴复制禁用的解决方法
2016/07/19 HTML / CSS
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
金智子午JAVA面试题
2015/09/04 面试题
销售心得体会
2014/01/02 职场文书
会计电算化学生个人的自我评价
2014/02/08 职场文书
安踏广告词改编版
2014/03/21 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
2015年十一国庆节演讲稿
2015/03/20 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS