JS完美运动框架
这套框架实现了多物体,任意值,链式运动,多值运动,基本满足常见的需求。
- /*
- 功能:完美运动框架,可以实现多物体,任意值,链式运动,多值运动
- 版本:V1.0
- 兼容性:Chrome,FF,IE8+ (opera没测)
- 备注:参考了智能社blur老师的代码
- */
- /*--------------------------------------------------------
- 功能: 获取某个节点下的带有某个class的所有节点
- 输入: oParent:要获取的class元素的父级节点
- sClass:要获取的元素的class名称
- 输出: 获取到的节点数组
- --------------------------------------------------------*/
- function getElementsByClassName(oParent, sClass){
- var oEle = oParent.getElementsByTagName('*');
- var result = [];
- for (var i = 0; i < oEle.length; i++) {
- if(oEle[i].className == sClass){
- result.push(oEle[i]);
- }
- }
- return result;
- }
- /*--------------------------------------------------------
- 功能: 获取某个对象的属性的具体数值
- 输入: obj:对象
- sName:属性
- 输出: 属性值,注意透明度输出最大为100,不是1
- --------------------------------------------------------*/
- function getStyle(obj, sName){
- var opacityFactor = 1;//如果是透明度属性,值为100,其他属性,值为1
- if(sName == 'opacity'){
- opacityFactor = 100;
- }
- if(obj.currentStyle){//IE
- return parseFloat(obj.currentStyle[sName]) * opacityFactor;
- }else{//非IE
- return parseFloat(getComputedStyle(obj, false)[sName]) * opacityFactor;
- }
- }
- /*--------------------------------------------------------
- 功能: 获取json对象的长度
- 输入: json:json对象
- 输出: json对象的长度
- --------------------------------------------------------*/
- function getJsonLength(json){
- var jsonLength = 0;
- for(var i in json){
- jsonLength++;
- }
- return jsonLength;
- }
- /*--------------------------------------------------------
- 功能: 多个属性值同时变化,可以变高,可以变低
- 输入: obj:要运动的对象
- property:属性名,比如'height'
- iTarget:运动结束之后的属性值,比如1000。如果是透明度,100代表全透明。
- endFunc(可选):运动结束之后执行的函数
- 输出: 无
- 备注: 如果是多物体,那么每个物体都要添加一个全局的timer(定时器)属性
- --------------------------------------------------------*/
- function startMove(obj, json, endFunc){
- clearInterval(obj.timer);//清除定时器,解决对同一个定时器调用startMove定时器叠加的问题
- var thisStyle = 0;//此时的样式值
- var speed = 0;//移动速度
- var bStop = true;//假设,刚开始所有的属性都达到了所设置的属性值
- var jsonLength = getJsonLength(json);
- obj.timer = setInterval(function(){
- /*
- 每次循环的时候,如果一个属性的值达到设定的目标,则把i加1,
- 最后检测如果i与json的长度一样,说明每个属性值都达到的目标,
- 则开启定时器并执行endFunc
- */
- var i = 0;
- for(var attr in json){
- thisStyle = parseFloat(getStyle(obj, attr));
- speed = (json[attr] - thisStyle) / 5;
- speed = speed>0 ? Math.ceil(speed) : Math.floor(speed);
- if(speed >= 0 && thisStyle >= json[attr]){//从小往大变化的停止条件
- i++;
- }else if(speed <= 0 && thisStyle <= json[attr]){//从大往小变化的停止条件
- i++
- }else{//没达到停止的条件,继续运动
- if(attr != 'opacity'){//如果不是设置透明度
- obj.style[attr] = thisStyle + speed + 'px';
- }else{//如果设置透明度
- obj.style[attr] = (thisStyle + speed) / 100 ;
- obj.style.filter = 'alpha(opacity:' + (thisStyle + speed) + ')';
- }
- }
- }
- if(i == jsonLength){
- clearInterval(obj.timer);
- if(endFunc) {endFunc();}
- }
- },30);
- }
可以看到在Chrome,FF,IE8+下可以完美运行。
我是JS新手,如果有更好,更方便的实现方案,欢迎各位留言交流。
另外:前端求职ing
JS完美运动框架的更多相关文章
- JS完美运动框架【利用了Json】
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- js 完美运动框架
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 完美运动框架(js)
一.前言 学习js运动时,由于在实现多种不同运动效果过程中很多代码是重复的,故将其封装达到代码重用. 二.代码封装重用 function startMove(obj, json, fnEnd){ cl ...
- JS 之完美运动框架
完美运动框架是对原来的任意值运动框架的改善和效率的提升,即利用了json对属性进行封装,从而提高效率: window.onload=function(){ var oDiv=document.getE ...
- 【repost】JavaScript完美运动框架的进阶之旅
运动框架的实现思路 运动,其实就是在一段时间内改变left.right.width.height.opactiy的值,到达目的地之后停止. 现在按照以下步骤来进行我们的运动框架的封装: 匀速运动. 缓 ...
- JavaScript “完美运动框架”
/* “完美运动框架”,所谓“完美”,就是可以实现多个参数,多个物体运动互不影响的一个运动函数move(). * 大致结构如下:运动框架 EXP: move(obj,{width:200,height ...
- 2015.8.2js-19(完美运动框架)
/*完美运动框架*/ //1.先清除定时期,2,获取样式,如果是opacity则单独解决,3,定义速度,4,定义当前值是否到达目的地,5,判断当前值是否到达目的地,6运动基本,如果是opacity f ...
- Javascript 完美运动框架——逐行分析代码,让你轻松了解运动的原理
大家一听这名字就知道,有了这套框架 网上的效果基本都是可以实现的.实际上之前的运动框架还是有局限性的,就是不能让好几个值一块运动. 那这个问题怎么解决呢? 我们先来看看之前的运动框架 function ...
- 纯js写“运动”框架
所谓“运动”不一定真的是运动,在连续的一段时间内改变某一样式都可以成为“运动”. 先写几个会用到的函数 //获取某一元素的指定样式 function getstyle (element, target ...
随机推荐
- Go语言 字符串
在所有编程语言中都涉及到大量的字符串操作,可见熟悉对字符串的操作是何等重要. Go中的字符串和C#中的一样(java也是),字符串内容在初始化后不可修改. 需要注意的是在Go中字符串是有UTF-8编码 ...
- A Tour of Go Methods
Go does not have classes. However, you can define methods on struct types. The method receiver appea ...
- hdoj 2203 亲和串
亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdoj 1859 最小长方形
最小长方形 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- [Objective-c 基础 - 1.3] OC带返回值的类方法
/* 计算器类 1>返回π 2>计算两个整数的平方 3>计算两个整数的和 */ #import <Foundation/Foundation.h> @interface ...
- PTA 5-14 电话聊天狂人 (25分)
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数NN(\le 10^5≤105),为通话记录条数.随后NN行,每行给出一条通话记录.简单起见,这里只列出 ...
- 1098. Insertion or Heap Sort (25)
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- iOS7 人机界面设计指南
iOS7 人机界面设计指南 苹果在WWDC 2013大会上发布了iOS 7,新系统一改5年来的拟物路线,在乔纳森•艾维的主导下,加入了更多的“扁平化”和“极简”现代设计元素. iOS7系统界面 ...
- java基础理论知识的一些总结
在学习Java初期,由于我们是刚开始接触Java,我们不仅需要牢牢掌握Java的基础理论知识,来为我们后面对Java更深层次的学习打好基础,而且我们需要养成编程人的思想习惯.来我们一起来探索Java基 ...
- NSTimer、 NSTask、 NSThread 和 NSRunloop 之间的区别
NSTimer是一个计时器对象,方法调用在对未来的选择对象. NSThread是一个线程类. 也就是创建一个线程. NSTask类是一个过程,一种方式运行程序从您的其他程序. NSOperation是 ...