原生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 相关文章推荐
asp.net HttpHandler实现图片防盗链
Nov 09 Javascript
基于Jquery实现表格动态分页实现代码
Jun 21 Javascript
解决火狐浏览器下JS setTimeout函数不兼容失效不执行的方法
Nov 14 Javascript
用javascript删除当前行,添加行(示例代码)
Nov 25 Javascript
JS实现点击颜色块切换指定区域背景颜色的方法
Feb 25 Javascript
Node.js 异步编程之 Callback介绍(一)
Mar 30 Javascript
微信小程序 开发之顶部导航栏实例代码
Feb 23 Javascript
vue-cli的webpack模板项目配置文件分析
Apr 01 Javascript
JavaScript实现form表单的多文件上传
Mar 27 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
Oct 30 Javascript
vue和webpack项目构建过程常用的npm命令详解
Jun 15 Javascript
小程序实现左滑删除效果
Jul 25 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.MVC的模板标签系统(四)
2006/09/05 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
javascript 动态加载 css 方法总结
2009/07/11 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
es7学习教程之fetch解决异步嵌套问题的方法示例
2017/07/21 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
2017/09/18 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
vue超时计算的组件实例代码
2018/07/09 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
JavaScript实现浏览器网页自动滚动并点击的示例代码
2020/12/05 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
python 提取文件的小程序
2009/07/29 Python
python使用自定义user-agent抓取网页的方法
2015/04/15 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
python对日志进行处理的实例代码
2018/10/06 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
把vgg-face.mat权重迁移到pytorch模型示例
2019/12/27 Python
如何在vscode中安装python库的方法步骤
2021/01/06 Python
浅谈css3新单位vw、vh、vmin、vmax的使用详解
2017/12/01 HTML / CSS
html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点
2013/01/09 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
业务助理岗位职责
2013/11/18 职场文书
资产运营委托书范本
2014/10/16 职场文书
检讨书怎么写
2015/01/23 职场文书
房产遗嘱范本
2015/08/06 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书