原生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中的prototype与继承
Apr 14 Javascript
js控制web打印(局部打印)方法整理
May 29 Javascript
简单谈谈javascript中的变量、作用域和内存问题
Aug 30 Javascript
第十章之巨幕页头缩略图与警告框组件
Apr 25 Javascript
jquery做个日期选择适用于手机端示例
Jan 10 Javascript
基于jQuery实现照片墙自动播放特效
Jan 12 Javascript
angular.JS实现网页禁用调试、复制和剪切
Mar 31 Javascript
富文本编辑器vue2-editor实现全屏功能
May 26 Javascript
vuex state中的数组变化监听实例
Nov 06 Javascript
Vue页面渲染中key的应用实例教程
Jan 12 Vue.js
使用原生javascript开发计算器实例代码
Feb 21 Javascript
教你使用vscode 搭建react-native开发环境
Jul 07 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 静态变量的初始化
2009/11/15 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
PHP实现的QQ空间g_tk加密算法
2015/07/09 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
解决vue项目中type=”file“ change事件只执行一次的问题
2018/05/16 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
Vue常用传值方式、父传子、子传父及非父子实例分析
2020/02/24 Javascript
详解JS预解析原理
2020/06/16 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
Python生成随机MAC地址
2015/03/10 Python
python中解析json格式文件的方法示例
2017/05/03 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
python 操作excel表格的方法
2020/12/05 Python
市优秀教师事迹材料
2014/02/05 职场文书
体育教师自我鉴定
2014/02/12 职场文书
青年文明号创建承诺
2014/03/31 职场文书
文案策划求职信
2014/04/14 职场文书
群众路线问题查摆对照检查材料
2014/10/04 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
七个非常实用的Python工具包总结
2021/06/15 Python
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL