定时器和函数的使用初级------移动一个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 这个要复杂一些 ...
随机推荐
- java学习笔记39(sql事物)
在之前的学习中,我们学习了使用PreparedStatement类,使用这个类消除了sql注入的隐患,可是,还有些一些其他的隐患,这里以银行转账业务为例, 假设 一个银行,张三在里面存了1000元, ...
- Windows10 64位安装TensorFlow-GPU
TensorFlow有GPU版和CPU版. GPU版需要CUDA和cuDNN支持,到链接:https://developer.nvidia.com/cuda-gpus 确认自己的显卡是否支持CUDA. ...
- C++常见的概念
1)多态:允许将子类类型的指针赋值给父类类型的指针.赋值以后,父类对象可以根据当前赋值给它的子类对象的特性以不同的方式运作. 2)深拷贝:重新分配内存:浅拷贝:共用同一内存. 3)友元:非成员函数不能 ...
- leetcode 421.Maximum XOR of Two Numbers in an Array
题目中给定若干个数,然后任意选定两个数使得其异或值最大. 先利用样例中的: 3 10 5 25 2 8 这些数转换为二进制来看的话那么是先找到最高位的1然后与数组中其他的数相与后的数值保存到set中去 ...
- day08 学习小测试 九九乘法表 车牌划分计算 大文件读取操作
1.1需求:读取一个100G的文件,检测文件中是否有关键字keys=['苍老师','小泽老师',"alex"], 如果有则替换成"***",并写入到另一个文件中 ...
- python------SocketServer (0809)
socket(一对一) 与socketserver 一.socketserver 1. 正式定义:The socketserver module simplifies the task of writ ...
- NN 激活函数 待修改
Softmax 函数/算法 https://www.zhihu.com/question/23765351 RELU 激活函数及其他相关的函数 http://blog.csdn.net/u013146 ...
- websocket 心跳重连
websocket 的基本使用: var ws = new WebSocket(url); ws.onclose = function () { //something reconnect(); // ...
- Centos7 下安装VMware tools
1:先在虚拟机点击安装VMware Tools 2:然后挂载 mount /dev/cdrom /mnt 3:进入/mnt,可以看到有 4:拷贝VMwareTools到其他 ...
- Spark性能优化指南——高级篇
本文转载自:https://tech.meituan.com/spark-tuning-pro.html 美团技术点评团队) Spark性能优化指南——高级篇 李雪蕤 ·2016-05-12 14:4 ...