定时器和函数的使用初级------移动一个div元素
在页面的动画效果中,经常有看到某个小块从一个地方移动到另一个地方的现象,现在,我们也来自己做一个这样的小动画,涉及到的基础包括定时器的使用和函数的使用
例如,我们要实现一个小方块从左面移动到右面,然后再从左面移动到右面,首先要做的事情是:
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元素的更多相关文章
- 每天一个JavaScript实例-从一个div元素删除一个段落
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 你能相信吗?这些都是由一个DIV元素实现的动画,纯CSS3技术
http://www.webhek.com/misc/css-loaders
- 使一个div元素上下左右居中
第一种方法 浮动流自我调节 .box{ widht:200px; height:200px; position:relative; } .box .son{ width:100px; height:1 ...
- ytu 1050:写一个函数,使给定的一个二维数组(3×3)转置,即行列互换(水题)
1050: 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 154 Solved: 112[ ...
- 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理
验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...
- javascript 在一个函数参数中包含另一个函数的引用
javascript函数的参数包含另一个函数的情形: <script> //b函数的参数func为另一个函数 function b(a, func) { alert(a); //调用参数 ...
- oracle 10G 没有 PIVOT 函数怎么办,自己写一个不久有了
众所周知,静态SQL的输出结构必须也是静态的.对于经典的行转列问题,如果行数不定导致输出的列数不定,标准的答案就是使用动态SQL, 到11G里面则有XML结果的PIVOT. 但是 oracle 10G ...
- 给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即,使用函数rand5()来实现函数rand7())
给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数. (即,使用函数rand5()来实现函数rand7()). 解答 rand5可以随机生成1,2,3,4,5:rand7可以随机生成1 ...
- coalesce函数-返回参数中第一个非null值
coalesce函数-返回参数中第一个非null值 学习了:http://www.cnblogs.com/zc_0101/archive/2009/08/11/1543650.html 这个要复杂一些 ...
随机推荐
- js判断是刷新页面还是关闭页面
<body onunload=fclose() onload=fload() onbeforeunload=bfunload()> <script> var s = " ...
- Linux删除软链接
首先我们先来创建一个文件 #mkdir test_chk #touch test_chk/test.txt #vim test_chk/test.txt (这一步随便在这个test.txt里写点东东即 ...
- iOS开发 SVN回退到某一个版本
1.选择你要恢复的工程,(注意:从SVN上checkout下来的工程不要改变,移动位置) 2.找到SVN的导航栏,点击“Working Copy”--->"Revert" 3 ...
- Centos 安装 python2.7.10以及pip
安装python2.7.10 1. 下载安装包并解压 wget https://www.python.org/ftp/python/2.7.10/Python-2.7.10.tgz tar -xf P ...
- linux 命令失效
失效的原因 是我在执行命令的时候输入错误了.在网上找了很多的办法都是以下两种方式: 其一:直接在linux命令行界面输入如下,然后回车(导入环境变量,以及shell常见的命令的存放地址): exp ...
- 百度前端代码规范:HTML
HTML 1.代码风格 1.1缩进与换行 [强制] 使用 4 个空格做为一个缩进层级,不允许使用 2 个空格 或 tab 字符. <style> ul { padding:; } < ...
- Web.xml详解分析
一.首先了解项目加载的优先级 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter. 最终得出的结 ...
- linux_wget 使用
一.Linux之安装软件之wget安装方法使用 https://www.cnblogs.com/peida/archive/2013/03/18/2965369.html
- 基于Spring-Cloud的微服务框架设计
基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍
- CentOS7下安装Python3及Pip3并保留Python2
1. 安装依赖环境 # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline- ...