javascript动画效果之缓冲动画(修改版)

news/2024/7/6 1:56:27

在编写多块同时触发运动的时候,发现一个BUG,

timer = setInterval(show, 30);本来show是一个自定义函数,
当设为timer = setInterval(show(one,two), 30);时,发现show里面的参数onetwo无法被导入,所以需要做以下代码改进和优化

原版的html和css代码在这里javascript动画效果之缓冲动画

js代码如下

 1  <script>
 2         function $(id) {
 3             return typeof id === "string" ? document.getElementById(id) : id;
 4         }
 5 
 6         window.onload = function() {
 7 
 8             //自定义变量
 9             var pto = $("div");
10             var btn = $("show");
11             var timer = null;
12             var speed = 0;
13 
14             //鼠标移动进入绑定事件
15             btn.onmouseenter = function() {
16                 //调用自定义函数,并传入参数0
17                 showPto(0);
18             }
19             //鼠标移动离开绑定事件
20             btn.onmouseleave = function() {
21                 //同理,并传入参数-200
22                 showPto(-200);
23             }
24 
25             //自定义函数,自定义参数名
26             function showPto(obj) {
27                 //当前只需要一个定时器,所以需要在每次开始前清除定时器
28                 clearInterval(timer);
29                 //定义定时器,自动增减
30                 timer = setInterval(function() {
31                     //obj为0时(0--200)/20,speed为+10,Math.ceil(),此时pto.offsetLeft变0
32                     //onj为-200时(-200-0)/20,speed为-10,所以Math.floor()
33                     speed = (obj - pto.offsetLeft) / 20;
34                     speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
35                     if (pto.offsetLeft == obj) {
36                         //当pto.offsetLeft为0或者-200时,清除定时器
37                         clearInterval(timer);
38                     } else {
39                         //通过speed来增加减少offsetLeft的值
40                         pto.style.left = pto.offsetLeft + speed + 'px';
41                     }
42                 }, 30);
43             }
44 
45 
46 
47         }
48     </script>

 

转载于:https://www.cnblogs.com/WhiteM/p/6024554.html


http://www.niftyadmin.cn/n/664546.html

相关文章

shell程序面试题

1.要求分析Apache访问日志,找出里面数量在前面100位的ip数.日志大约在78M左右.一下是apache日志文件 节选(其中日志access.log): 218.107.27.137 ..... 202.112.32.22 ....[26/Mar/2006:23:59:55 0800]....... shell程序如下: 方法一: (1)#!/bin/bash #先找出唯一IP cat access…

Android mediaRecorder框架简述(二)

这里有个setupVideiEncoder,看来这里应该是对视频编码的地方 根据不同的编码类型来设置不同的参数&#xff0c;这个方法代码有些多直截取部分代码&#xff1a; 来看看关键的一句&#xff0c;这里创建了OMXCodec 然后把创建了的编码器赋值给MediaSource&#xff0c;这里的MediaS…

java ArrayList 实现

关于ArrayList的实现和原理&#xff0c;原文出处&#xff1a;http://www.cnblogs.com/ITtangtang/p/3948555.html 我觉得他写的非常好&#xff0c;真的很好. 做一个记录和总结吧 public class arraylist<E> {/*** 存放集合的元素 * */private transient Object[] eleme…

Android MediaPlayer+Stagefright框架(音频)图解

在android原生的媒体播放器中是由mediaplayerservice来控制媒体播放器的&#xff0c;在mediaplayerservice中创建了mediaplayer,在mediaplayer.java的native方法通过jni调用android_media_mediaplayer.cpp中的方法&#xff0c;接着往下调用mediaplayer.cpp中的方法&#xff0c;…

shell 面试题汇集

利用 top 取某个进程的 CPU 的脚本 : st1\:*{behavior:url(#ieooui) } <!-- /* Font Definitions */ font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; m…

Linq分页查询

//Linq分页查询 int pageIndex Convert.ToInt32(HttpContext.Current.Request["PageIndex"]); int start pageIndex * Parameter.pageSize; int end (pageIndex 1) * Parameter.pageSize; userList userList.Take<UserInfo>(end).Skip<UserInfo>(st…

Stagefright框架解读(—)音视频Playback流程

转载请注明出处&#xff1a;http://blog.csdn.net/itachi85/article/details/7216639 从Android 2.0&#xff0c;Google引进了Stagefright&#xff0c;并在android2.3时用Stagefright在Android中是以shared library的形式存在(libstagefright.so)&#xff0c;其中AwesomePlayer…

面试-双向链表

面试遇到一个题目&#xff0c;写一个双向链表&#xff0c;包括添加&#xff0c;删除&#xff0c;查找和遍历。当时写了一塌糊涂&#xff0c;后来自己都觉得想笑&#xff0c;双向写着写着被我写成了单向不像单向&#xff0c;双向不像双向了&#xff0c;真是不伦不类。之后 我把这…