JS运动 - 无缝滚动和缓动动画

  • 无缝滚动原理:首先先复制两张图片(第一张和第二张)放到最后面;ul绝对定位,如果ul的left值大于等于4张图片的宽度,就应该快速复原为0.

html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>无缝滚动</title>
<style>
* {
margin: 0;
padding: 0;
}
.box {
width: 600px;
height: 200px;
background: red;
margin: 100px auto;
overflow: hidden;
position: relative;
}
ul {
list-style: none;
/*font-size: 0;*/ /* 清除图片之间的间距之方法一 */
width: 1000%;
position: absolute;
left: 0;
top: 0;
}
li {
float: left;
}
li img {
vertical-align: bottom; /* 清除图片之间的间距之方法二 */
}
</style>
</head>
<body>
<div class="box">
<ul>
<li><img src="images/scroll01.jpg" alt=""></li>
<li><img src="images/scroll02.jpg" alt=""></li>
<li><img src="images/scroll03.jpg" alt=""></li>
<li><img src="images/scroll04.jpg" alt=""></li>
<li><img src="images/scroll01.jpg" alt=""></li>
<li><img src="images/scroll02.jpg" alt=""></li>
<li><img src="images/scroll03.jpg" alt=""></li>
<li><img src="images/scroll04.jpg" alt=""></li>
</ul>
</div>
</body>
</html>

JS

<script>
window.onload = function () {
var ul = document.getElementsByTagName("ul")[0];
var offsetX = 0;
var timer = null;
timer = setInterval(scrollDidScroll,10);
function scrollDidScroll() {
offsetX--;
offsetX = offsetX < -1200 ? 0 : offsetX;
ul.style.left = offsetX + "px";
console.log(offsetX);
}
ul.onmouseover = function () {
clearInterval(timer);
}
ul.onmouseout = function () {
timer = setInterval(scrollDidScroll,10);
}
}
</script>

效果图

  • 缓动动画(减速运动)原理 : 记住公式

假如:初始值 leader = 0; 目标值 target = 400; speed = 10;公式如下

leader = leader + (target - leader) / speed;

HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>滚动图</title>
<style>
* {
padding: 0;
margin: 0;
font-size: 10px;
}
ul, ol {
list-style: none;
}
.box {
width: 490px;
height: 170px;
margin: 100px auto;
position: relative;
overflow: hidden;
}
.box ul {
position: absolute;
top: 0;
left: 0;
width: 800%;
height: 100%;
}
.box ul li {
width: 490px;
float: left;
}
.box ol {
position: absolute;
bottom: 10px;
left: 50%;
margin-left: -40px;
text-align: center;
}
.box ol li {
width: 15px;
height: 15px;
line-height: 15px;
float: left;
background-color: #cccccc;
color: #ffffff;
margin-left: 10px;
cursor: pointer;
}
.box .current {
background-color: orange;
}
</style>
</head>
<body>
<div class="box">
<ul id="scrollJS">
<li><img src="0329images/01.jpg" alt=""></li>
<li><img src="0329images/02.jpg" alt=""></li>
<li><img src="0329images/03.jpg" alt=""></li>
<li><img src="0329images/04.jpg" alt=""></li>
</ul>
<ol id="olJS">
<li class="current">1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ol>
</div>
</body>
</html>

JS

<script>
window.onload = function () {
var width = 490;
var timer = null;
var leader = 0;
var scroll = document.getElementById("scrollJS");
var lis = document.getElementById("olJS").children;
for (var i=0;i<lis.length;i++) {
lis[i].index = i;
lis[i].onmouseover = function () {
clearInterval(timer);
for (var j=0;j<lis.length;j++) {
lis[j].className = "";
}
this.className = "current";
var target = -this.index * width;
timer = setInterval(function () { leader = leader + (target - leader) / 10;
scroll.style.left = leader + "px";
},30);
}
}
}
</script>

效果图

JS运动 - 无缝滚动和缓动动画的更多相关文章

  1. JS 实现无缝滚动动画原理(初学者入)

    这段时间在教培训班的学生使用原生javascript实现无缝滚动的动画案例,做了这个原理演示的动画,分享给自学JS的朋友!博主希望对你们有帮助! 在讲解之前先看一下demo: demo:https:/ ...

  2. scrollLeft的相关问题(js横向无缝滚动)

    <div id="demo"> <div id="innerdemo"> <div id="demo1"> ...

  3. js图片无缝滚动代码

    想必大家都注意到<marquee>的不循环滚动,所以出现了很多替代脚本,或iframe或JS输出<marquee>,不管怎么做,都略显麻烦.下面说一下这个相对简单的实现思路:一 ...

  4. JS平滑无缝滚动实现———实现首页广告自动滚动效果(附实例)

    本文我们实现纯JS方式的滚动广告效果. 先show一下成品: 首先是网页样式: 1. #demo { 2. background: #FFF; 3. overflow:hidden; 4. borde ...

  5. js 图片无缝滚动

    html部分 <div id="roll"> <a href="javascript:void(0)" class="prev&qu ...

  6. JS实现无缝滚动

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. js文字无缝滚动

    <div id=demo style="overflow:hidden; width:128px; height:300px;"> <div id=demo1&g ...

  8. CSS3动画之无缝滚动

    与js的无缝滚动类似,整个承载图片的盒子移动,克隆一组图片放置最后,当一组图片播放结束后将盒子定位在有一组图片宽度的左侧 HTML结构: <div class="box"&g ...

  9. JavaScript--缓动动画+轮播图

    上效果: 实现步骤: 最重要的是运动公式!!! <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

随机推荐

  1. C#基础第八天-作业答案-设计类-面向对象方式实现两个帐户之间转账

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. mysql group replication 主节点宕机恢复

    一.mysql group replication 生来就要面对两个问题: 一.主节点宕机如何恢复. 二.多数节点离线的情况下.余下节点如何继续承载业务. 在这里我们只讨论第一个问题.也就是说当主结点 ...

  3. uefi+GPT分区安装ubuntu[zz]

    现状:1.预装win8的笔记本几乎都是uefi启动模式,配合GPT磁盘分区,于是遇到了“麻烦”不会装了,或者说按照老教程安装,结果失败了.而且有很多人在问怎么解决,其实网上就有嘛,关键词就是“uefi ...

  4. Windows搭建测试RabbitMq遇到的问题

    报错: d:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.5\sbin>rabbitmq-plugins eble rabbitmq_ma ...

  5. IOS6 IOS7 Mapkit draw Rout(地图划线)

    IOS7  比较简单 CLLocationCoordinate2D  _start2D; CLLocationCoordinate2D  _end2D; NSArray *_routes; IOS6 ...

  6. Android Webview SSL 自签名安全校验解决方案

    服务器证书校验主要针对 WebView 的安全问题. 在 app 中需要通过 WebView 访问 url,因为服务器采用的自签名证书,而不是 ca 认证,使用 WebView 加载 url 的时候会 ...

  7. destoon入门实例与常见问题

    收集了一些destoon入门实例与常见问题,大家做个参考. 链接如下: destoon忘记后台密码怎么办?destoon找回管理员密码 忘记destoon管理员后台账号密码怎么办?解决方法 desto ...

  8. asp.net core在linux上的部署调试

    双十一买了阿里云的LINUX服务器三年¥720 把自己的niunan.net一系列网站都部署上去 用jexus来部署,部署时发现头一个网站没问题,但是后一个网站部署就有问题..输入域名打不开,但JEX ...

  9. Atitit  项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx

    Atitit  项目界面h5化静态html化计划---vue.js 把ajax获取到的数据 绑定到表格控件 v2 r33.docx 1. 场景:应用在项目列表查询场景下1 1.1. 预计初步掌握vue ...

  10. Java之JDBC①

    JDBC工具准备:Mysql(数据库). MyEclipse(开发工具).Navicat(数据库管理工具) JDBC编程步骤·加载驱动程序:class.forName(driverClass);   ...