在页面的动画效果中,经常有看到某个小块从一个地方移动到另一个地方的现象,现在,我们也来自己做一个这样的小动画,涉及到的基础包括定时器的使用和函数的使用

例如,我们要实现一个小方块从左面移动到右面,然后再从左面移动到右面,首先要做的事情是:

1.指定一个开关,点击的时候,开始左移或者开始右移

2.设置需要移动的元素块,为了醒目,我们把需要移动的元素设置背景为红色,设置定位属性为:绝对定位:absolute

3.开启一个定时器

4.设定需要移动的步长:speed

5.设置需要移动到的目标点:target

6.因为要移动元素,也就是要设置元素的left 属性,而获取元素属性的时候,不同的浏览器获取方式不一样,所以需要先写一个属性获取的函数,getStyle()

7.写一个左移的函数

8. 写一个右移的函数

需要注意的一点:定时器,使用的时候,记得先关后开,即使用前先清除

如下:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
div.box {
position: relative;
}
div.tar {
top: 5em;
left: 2em;
position: absolute;
left: 0;
width: 100px;
height: 100px;
background: #f33;
}
div.mubiao {
position: absolute;
left: 0;
width: 500px;
height: 200px;
border: 1px solid #888;
}
</style>
<script>
window.onload = function () {
var Ainput = document.getElementsByTagName("input");
var Odiv = document.getElementById("tar");
Odiv.timer = null;
var timer = null;
var speed = 10;
Ainput[0].onclick = function () {
clearTimeout(Odiv.timer);
Odiv.timer = setInterval(domoveleft, 100);
};
Ainput[1].onclick = function () {
clearTimeout(Odiv.timer);
Odiv.timer = setInterval(domoveright, 100);
};
function domoveleft() {
var Ocurleft = parseInt(getStyle(Odiv, 'left'));
var target = 500;
var Onextleft = Ocurleft + speed;
if (Onextleft >= target) {
Odiv.style.left = target + 'px';
clearTimeout(Odiv.timer);
} else {
Odiv.style.left = Onextleft + 'px';
}
};
function domoveright() {
var Ocurleft = parseInt(getStyle(Odiv, 'left'));
var target = 0;
var Onextleft = Ocurleft - speed;
if (Onextleft <= target) {
Odiv.style.left = target + 'px';
clearTimeout(Odiv.timer);
} else {
Odiv.style.left = Onextleft + 'px';
}
}
}
function getStyle(obj, attr) {
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, 'huanying2015')[attr];
}
</script>
</head>
<body>
<div class="box">
<input type="button" value="向右">
<input type="button" value="向左">
<div class="tar" id="tar"></div>
<div class="mubiao"></div>
</div>
</body>
</html>

运行结果:

上面的函数,可以简写如下:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
div.box {
position: relative;
}
div.tar {
top: 5em;
left: 2em;
position: absolute;
left: 0;
width: 100px;
height: 100px;
background: #f33;
}
div.mubiao {
position: absolute;
left: 0;
width: 500px;
height: 200px;
border: 1px solid #888;
}
</style>
<script>
window.onload = function () {
var Ainput = document.getElementsByTagName("input");
var Odiv = document.getElementById("tar");
Ainput[0].onclick = function () {
domove(Odiv, 'left', 10, 500);
};
Ainput[1].onclick = function () {
domove(Odiv, 'left', 10, 0);
}
function domove(obj, attr, speed, target) {
clearInterval(obj.timer);
var Ocurposition = parseInt(getStyle(obj, attr));
speed = Ocurposition < target ? speed : -speed;
obj.timer = setInterval(function () {
var Ocurposition = parseInt(getStyle(obj, attr));
var nextposition = Ocurposition + speed;
if (nextposition >= target && speed > 0 || nextposition <= target && speed < 0) {
nextposition = target;
}
obj.style[attr] = nextposition + 'px';
if (nextposition == target) {
clearInterval(obj.timer);
}
}, 100);
}
}
function getStyle(obj, attr) {
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, 'huanying2015')[attr];
}
</script>
</head>
<body>
<div class="box">
<input type="button" value="向右">
<input type="button" value="向左">
<div class="tar" id="tar"></div>
<div class="mubiao"></div>
</div>
</body>
</html>

运行的结果:是一样的:

定时器和函数的使用初级------移动一个div元素的更多相关文章

  1. 每天一个JavaScript实例-从一个div元素删除一个段落

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  2. 你能相信吗?这些都是由一个DIV元素实现的动画,纯CSS3技术

    http://www.webhek.com/misc/css-loaders

  3. 使一个div元素上下左右居中

    第一种方法 浮动流自我调节 .box{ widht:200px; height:200px; position:relative; } .box .son{ width:100px; height:1 ...

  4. ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)

    1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 154  Solved: 112[ ...

  5. 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理

    验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...

  6. javascript 在一个函数参数中包含另一个函数的引用

    javascript函数的参数包含另一个函数的情形: <script> //b函数的参数func为另一个函数 function b(a, func) {  alert(a); //调用参数 ...

  7. oracle 10G 没有 PIVOT 函数怎么办,自己写一个不久有了

    众所周知,静态SQL的输出结构必须也是静态的.对于经典的行转列问题,如果行数不定导致输出的列数不定,标准的答案就是使用动态SQL, 到11G里面则有XML结果的PIVOT. 但是 oracle 10G ...

  8. 给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即,使用函数rand5()来实现函数rand7())

    给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数. (即,使用函数rand5()来实现函数rand7()). 解答 rand5可以随机生成1,2,3,4,5:rand7可以随机生成1 ...

  9. coalesce函数-返回参数中第一个非null值

    coalesce函数-返回参数中第一个非null值 学习了:http://www.cnblogs.com/zc_0101/archive/2009/08/11/1543650.html 这个要复杂一些 ...

随机推荐

  1. .NET并行计算和并发5:多线程编程一般指导性原则

    使用多线程时要考虑以下准则: 不要使用 Thread.Abort 终止其他线程. 对另一个线程调用 Abort 无异于引发该线程的异常,也不知道该线程已处理到哪个位置. 不要使用 Thread.Sus ...

  2. WEBBASE篇: 第九篇, JavaScript知识4

    JavaScript 4 练习1 <!doctype html> <html lang="en"> <head> <meta charse ...

  3. Spring Cloud 请求重试机制核心代码分析

    场景 发布微服务的操作一般都是打完新代码的包,kill掉在跑的应用,替换新的包,启动. spring cloud 中使用eureka为注册中心,它是允许服务列表数据的延迟性的,就是说即使应用已经不在服 ...

  4. 产生10个随机数5-9之间 统计一个int类型的一维数组中有多少个在[min,max]之间的数

    * 产生10个随机数5-9之间 统计一个int类型的一维数组中有多少个在[min,max]之间的数 */ import java.util.*; public class Demo{ public s ...

  5. 第二章 JavaScript案例(中)

    1. js事件 HTML代码 <!DOCTYPE html> <html lang="en" onUnload="ud()"> < ...

  6. vscode 调试 TypeScript

    安装 typescript 依赖 npm install typescript --save-dev 目录结构: 添加 tsconfig.json 主要是将 sourceMap 设置为true. { ...

  7. C#编程经验-VS Debug

    F11 OneStepDebugF10 ProcessDebugbreakPointDebug(quick location,then use one step debug)

  8. PAT 甲级 1083 List Grades (25 分)

    1083 List Grades (25 分) Given a list of N student records with name, ID and grade. You are supposed ...

  9. Java中产生随机数的两个方法

    Java中产生随机数的两个方法 一.利用random方法来生成Java随机数. 在Java语言中生成Java随机数相对来说比较简单,因为有一个现成的方法可以使用.在Math类中,Java语言提供了一个 ...

  10. 数据库SQL语言学习----左外连接,右外连接,外连接,自然连接的形象对比

    现在有两张表,一张Student 另一张Score   1.查询每个学生及其选修课程的情况: 自然连接,Sno在Cscore中找不到就不显示,Cno在Cscore中找不到也不显示 SELECT Stu ...