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. Jmeter 线程组、运行次数参数化

    Jmeter的jmx文件保存了线程数和运行次数等参数,这个参数可以在命令行中传入参数的方式来修改数值 步骤如下 1.生成线程和运行次数的参数 Jmeter选项中函数助手对话框,选中__P参数,这个参数 ...

  2. CentOS 7 安装以及配置

    http://blog.csdn.net/qzc295919009/article/details/42708653

  3. LED音乐频谱之输入数据处理

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38023431 通过前面的介绍我们知道.声音信号要通过AD转换,变成我们可以处理 ...

  4. char型指针和字符串字面量和字符数组

    1.当一个char型指针指向一个字符串字面量(也就是常量字符串)时,该指针必须由const修饰,否则,系统会给出deprecated(不赞成)的警告.原因是:字符串字面量不可改变,当它被一个非cons ...

  5. Atitit 项目的主体设计与结构文档 v5

    Atitit 项目的主体设计与结构文档 v5 1. 版本历史说明2 2. 功能大概说明2 3. 实现的目标3 3.1. cross device跨设备(pc 手机 平板)3 3.2. cross sc ...

  6. iOS7.0中UILabel高度调整注意事项

    转自:http://blog.csdn.net/k12104/article/details/33731833 http://herkuang.info/blog/2013/12/31/ios7%E4 ...

  7. 【iOS XMPP】使用XMPPFramewok(一):添加XMPPFramework(XCode 4.6.2)

    转自:http://www.cnblogs.com/dyingbleed/archive/2013/05/09/3069145.html XMPPFramework GitHub: https://g ...

  8. 细说php(二) 变量和常量

    一. 变量的声明 1. php中声明变量的方法:  $var = 123; 2. php是弱类型的语言, 变量的类型由存储的值决定 注: Java是强类型语言, 声明变量一定要先指定类型 二. 变量的 ...

  9. Vue知识点超快速学习

    基础知识: vue的生命周期: beforeCreate/created.beforeMount/mounted.beforeUpdate/updated.beforeDestory/destorye ...

  10. AsyncContext简介

    为了支持异步处理,在Servlet 3.0中,在ServletRequest上提供了startAsync()方法: AsyncContext startAsync() throws Java.lang ...