原生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进度条. 二.简 ...
随机推荐
- Python--day22--面向对象的交互
Python里面自带的类和对象: 类名的作用: 类里面的与属性相关的对象self的运用: 实例化:就是创建一个对象 调用方法,类名.方法名(对象名) 执行步骤: 简写:alex.walk()等价于Pe ...
- java 集合之HashMap的三种遍历
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. 这周我们只需记住三种遍历方法 1.通过keySet()获取键,再利用hashmap里面的.get(key)方法通过键获取 ...
- hadoop-1.2.1 伪分布配置
首先JDK安装及相关环境变量配置 # Java environment setting JAVA_HOME=/usr/java/default CLASSPATH=.:$JAVA_HOME/lib/t ...
- v-for(:key)绑定index、id、key的区别
Vue 2.0 v-for 响应式key, index及item.id参数对v-bind:key值造成差异研究 在github上阅览README.md以获得最佳阅读体验,点这里 v-for响应式key ...
- 1626 - Brackets sequence——[动态规划]
Let us define a regular brackets sequence in the following way: Empty sequence is a regular sequence ...
- P1070 东风谷早苗
题目描述 在幻想乡,东风谷早苗是以高达控闻名的高中生宅巫女.某一天,早苗终于入手了最新款的钢达姆模型.作为最新的钢达姆,当然有了与以往不同的功能了,那就是它能够自动行走,厉害吧(好吧,我自重).早苗的 ...
- H3C TFTP协议介绍
- CF161BDiscounts
CF161B 题目大意;要购买\(n\)件物品,有\(A\)\(B\)两种类型,要求分成\(k\)组,其中如果其中一组含有\(A\)类物品,那么这一组最便宜的一件物品就会半价 怎么分组最小化代价? 我 ...
- html根据下拉框选中的值修改背景颜色
错误的写法 <!doctype html><html><head><meta charset="utf-8"><title&g ...
- 北京信息科技大学第十一届程序设计竞赛E-- kotori和素因子(深搜)
链接:https://ac.nowcoder.com/acm/contest/940/E 题目描述 kotori拿到了一些正整数.她决定从每个正整数取出一个素因子.但是,kotori有强迫症,她不允许 ...