原生javascript 元素依次掉落及上升
一、实现原理:
① 通过onoff开关,判断元素是往下走 还是往上走,并在每次清除定时器后,把onoff 设为 !onoff,以便下次点击做判断
②move函数的运用
二、代码
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
*{ margin:0;padding: 0;}
div{position: absolute; width:40px; height:40px; background: red; top: 0}
</style>
</head>
<body>
<div></div> <script type="text/javascript">
window.onload = function(){
var box = document.getElementsByTagName('div'); //动态获取未来元素
var len = 16;
var str = '';
var timer = null;
var num = 0;
var onoff = true; //点击开关 // 动态生成div标签
for (var i = 0; i < len; i++) {
str += "<div style='left:"+(i*50)+"px;'></div>"
}
document.body.innerHTML = str; document.onclick = function(){
// 清除定时器
clearInterval(timer); // 判断往下还是往上
if(onoff){
// 开启定时器,让元素挨个往下掉
timer = setInterval(function(){
move(box[num],'top',10,500);
num++;
// 当最后一个掉完,清除定时器,并把开关设为false,把num重置为0
if(num == len){
clearInterval(timer);
onoff = !onoff;
num = 0;
}
},100)
}else{
// 开启定时器,让元素挨个往上走
timer = setInterval(function(){
move(box[num],'top',10,0);
num++;
// 当最后一个升完,清除定时器,并把开关设为true,把num重置为0
if(num == len){
clearInterval(timer);
onoff = !onoff;
num = 0;
}
},100)
}
} /*
obj:要运动的元素
attr:属性
dir:步长
target:目标点
endFn:回调函数
*/
function move(obj,attr,dir,target,endFn){ //根据元素当前位置和目标点的比较,动态设置步长为正数或负数
dir = parseInt( getStyle(obj,attr) ) < target ? dir : -dir; // 1、清除定时器
clearInterval(obj.timer);
// 2、设置定时器
obj.timer = setInterval(function(){
// 3、获取元素当前位置+步长
var speed = parseInt( getStyle(obj,attr) ) + dir;
// 4、如果元素当前位置超过目标点,则把当前位置==目标点
if( speed > target && dir > 0 || speed < target && dir < 0){
speed = target
}
// 5、设置元素位置
obj.style[attr] = speed + 'px';
// 6、判断是否到达目标点,如果到达则停止定时器
if(speed == target){
clearInterval(obj.timer);
// 回调函数,如果endFn存在则执行
endFn && endFn();
} },20)
} /*
获取非行间样式:
标准浏览器下 getComputedStyle(obj)[attr]
IE浏览器下 obj.currentStyle[attr]
*/ function getStyle(obj,attr){
return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj)[attr];
} }
</script>
</body>
</html>
原生javascript 元素依次掉落及上升的更多相关文章
- 原生JavaScript技巧大收集(11~20)-(终于又被我找到这篇文章了)
11.原生JavaScript加入收藏夹 function AddFavorite(sURL, sTitle) { try { window.external.addFavorite(sURL, sT ...
- 原生JavaScript技巧大收集100个
原生JavaScript技巧大收集 1.原生JavaScript实现字符串长度截取function cutstr(str, len) { var temp; var icount = 0; var p ...
- 100个常用的原生JavaScript函数
1.原生JavaScript实现字符串长度截取 复制代码代码如下: function cutstr(str, len) { var temp; var icount = 0; var ...
- 原生JavaScript如何解决父元素查找指定类名的子元素的问题
问题:已知一个元素的类名是right并且这个元素的祖先元素的类名为parent,现在想通过原生JavaScript获得这个类名为right的元素. 我的思路:利用递归.先判断已知的祖先元素(题中的pa ...
- 原生JavaScript支持6种方式获取元素
一.原生JavaScript支持6种方式获取元素 document.getElementById('id'); document.getElementsByName('name'); document ...
- 原生javascript封装动画库
****转载自自己发表于牛人部落专栏的文章**** 一.前言 本文记录了自己利用原生javascript构建自己的动画库的过程,在不断改进的过程中,实现以下动画效果: 针对同一个dom元素上相继发生的 ...
- 浅谈 原生javaScript&&react 实现全局触摸按钮(附带对addeventlistener的了解)
1.采用原生javaACript 实现全局触摸按钮 首先在控制台输出,观察事件有哪些关于触摸的字段可以使用,然后拿这些字段的数据开始来写方法. 因为要做的是全局触摸按钮,我需要拿到的是按钮时时的坐标位 ...
- 你可能不需要 jQuery!使用原生 JavaScript 进行开发
很多的 JavaScript 开发人员,包括我在内,都很喜欢 jQuery.因为它的简单,因为它有很多丰富的插件可供使用,和其它优秀的工具一样,jQuery 让我们开发人员能够更轻松的开发网站和 We ...
- 原生javascript模仿win8等待进度条。
一.序言 一直很中意win8等待提示圆圈进度条.win8刚出来那会,感觉好神奇!苦于当时没思路,没去研究.通过最近网上找找资料,终于给搞出来了!先上Demo,献丑了!预览请看:win8进度条. 二.简 ...
随机推荐
- jq杂项方法/工具方法----each() grep() map()
each() 用于循环数组 对象(单纯遍历) 返回 false 可提前停止循环.接受的参数是数组名和要执行的函数,函数参数为数组索引和当前元素. var arr = [30, 40, 50,1 ,8] ...
- Codeforces Round #176 (Div. 1 + Div. 2)
A. IQ Test 模拟. B. Pipeline 贪心. C. Lucky Permutation 每4个数构成一个循环. 当n为偶数时,n=4k有解:当n为奇数时,n=4k+1有解. D. Sh ...
- 2006年NOIP普及组复赛题解
题目涉及算法: 明明的随机数:简单模拟: 开心的金明:01背包: Jam的计数法:模拟: 数列:二进制. 明明的随机数 题目链接:https://www.luogu.org/problem/P1059 ...
- CentOS7增加或修改SSH端口号
https://blog.csdn.net/ausboyue/article/details/53691953 前言:开启某服务或软件的端口,要从该服务或软件监听的端口(多以修改配置文件为主),SeL ...
- java 多线程之synchronized wait/notify解决买票问题
一.Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程对象的st ...
- Python--day60--建立第一个Djiango项目
- H3C OSPF可选配置命令
- 如何解决vue项目中 scss 不支持 scoped 的 /deep/ 穿透写法
如何解决vue项目中 scss 不支持 scoped 的 /deep/ 穿透写法 用过vue的人估计都用过scoped样式属性,但有时候需要穿透样式,啥办? 很多资料都说用>>> 或 ...
- MySQL视图操作命令详解
内容目录 创建视图 删除视图 修改视图 查看视图 §创建视图 在MySQL中,创建视图的完整语法如下: CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | ME ...
- H3C端口状态迁移