原生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 相关文章推荐
jQuery版仿Path菜单效果
Dec 15 Javascript
js中reverse函数的用法详解
Dec 26 Javascript
jQuery中:has选择器用法实例
Dec 30 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
Mar 04 Javascript
Javascript中使用parseInt函数需要注意的问题
Apr 02 Javascript
功能强大的Bootstrap使用手册(一)
Aug 02 Javascript
JS中对Cookie的操作详解
Aug 05 Javascript
JavaScript模仿Pinterest实现图片预加载功能
Oct 25 Javascript
angularjs数组判断是否含有某个元素的实例
Feb 27 Javascript
微信小程序自定义toast弹窗效果的实现代码
Nov 15 Javascript
浅谈javascript中的prototype和__proto__的理解
Apr 07 Javascript
vue3使用vue-router的完整步骤记录
Jun 20 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
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
在PHP上显示JFreechart画的统计图方法
2013/11/03 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
javascript实现的使用方向键控制光标在table单元格中切换
2010/11/17 Javascript
多个datatable共存造成多个表格的checkbox都被选中
2013/07/11 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
2016/01/28 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
2016/09/19 Javascript
Mint UI 基于 Vue.js 移动端组件库
2017/11/07 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
vue相同路由跳转强制刷新该路由组件操作
2020/08/05 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
Python转换HTML到Text纯文本的方法
2015/01/15 Python
python实现按行切分文本文件的方法
2016/04/18 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python实现简单飞行棋
2020/02/06 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
英国假发网站:Hothair
2018/02/23 全球购物
方法名是否可以与构造器的名字相同
2012/06/04 面试题
车间主管岗位职责
2013/11/14 职场文书
销售会计工作职责
2013/12/02 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
优秀大学生自荐信
2014/06/09 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
结婚幸福感言
2015/08/01 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫
详解Python中__new__方法的作用
2022/03/31 Python