原生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的日期选择控件
Oct 27 Javascript
ASP中进行HTML数据及JS数据编码函数
Nov 11 Javascript
javascript中动态加载js文件多种解决办法总结
Nov 15 Javascript
Jquery插件easyUi表单验证提交(示例代码)
Dec 30 Javascript
纯jquery实现模仿淘宝购物车结算
Aug 20 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
js学习总结之dom2级事件基础知识详解
Jul 27 Javascript
Vue.js仿微信聊天窗口展示组件功能
Aug 11 Javascript
vue-router 路由基础的详解
Oct 17 Javascript
vue-cli脚手架引入图片的几种方法总结
Mar 13 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
Mar 14 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 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
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
php多文件上传下载示例分享
2014/02/20 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
浅谈PHP array_search 和 in_array 函数效率问题
2019/10/15 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
Angularjs过滤器实现动态搜索与排序功能示例
2017/12/13 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
python分治法求二维数组局部峰值方法
2018/04/03 Python
Django框架多表查询实例分析
2018/07/04 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
Python调用服务接口的实例
2019/01/03 Python
Python while true实现爬虫定时任务
2020/06/08 Python
python logging模块的使用
2020/09/07 Python
分享一个python的aes加密代码
2020/12/22 Python
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
单位介绍信范文
2014/01/18 职场文书
村官工作鉴定评语
2014/01/27 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
会计专业自荐书
2014/07/08 职场文书
给老婆的保证书
2015/01/16 职场文书
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python