javascript实现网页中涉及的简易运动(改变宽高、透明度、位置)


Posted in Javascript onNovember 29, 2015

平时工作中写网页涉及的运动往往都非常简单,比如改变宽高,透明度,位置,是最常用的几种形式,为了省事,整合了下,于是就有了下面这个东东:

兼容:IE系列、chrome、firefox、opera、Safari、360

/*
 javascript简易运动
 
 Move.action(dom对象,json格式属性值对,缓动参考值,回调方法)

 示例:
 var box = document.getElementById('Ele');
 Move.action(box,{width:500,height:200,left:200,top:100,marginLeft:10,opacity:.5},5,function(){
  console.log('end');
 });

*/


var Move = {

 version: '1.5',

 //判断是否空对象
 isEmptyObject: function(obj) {
 for (var attr in obj) {
 return false;
 }
 return true;
 },
 //取CSS样式值
 getStyle: function(obj, attr) {
 if (obj.currentStyle) { //IE
 return obj.currentStyle[attr];
 } else {
 return getComputedStyle(obj, null)[attr];
 }
 },
 //运动
 action: function(obj, json, sv, callback) {

 _this = this;

 //obj是否为空
 if (_this.isEmptyObject(obj)) {
 return false;
 }

 //运动开始 
 clearInterval(obj.timer);
 obj.timer = setInterval(function() {
 var isAllCompleted = true, //假设全部运动都完成了
 speed, //速度
 attrValue, //当前值
 targetV; //目标值
 for (attr in json) {
 attrValue = _this.getStyle(obj, attr);
 switch (attr) {
  case 'opacity':
  attrValue = Math.round((isNaN(parseFloat(attrValue)) ? 1 : parseFloat(attrValue)) * 100);
  speed = (json[attr] * 100 - attrValue) / (sv || 4);
  targetV = json[attr] * 100;
  break;
  default:
  attrValue = isNaN(parseInt(attrValue)) ? 0 : parseInt(attrValue);
  speed = (json[attr] - attrValue) / (sv || 4);
  targetV = json[attr];
 }

 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
 //如果循环过程中存在尚未结束的运动,isAllCompleted为假
 if (attrValue != targetV) {
  isAllCompleted = false;
 }

 switch (attr) {
  case 'opacity':
  {
  obj.style.filter = "alpha(opacity=" + (attrValue + speed) + ")";
  obj.style.opacity = (attrValue + speed) / 100;
  };
  break;
  default:
  obj.style[attr] = attrValue + speed + 'px';
 }
 }

 //所有循环结束后,只有当全部运动结束后(isAllCompleted=true)时才关闭定时器
 if (isAllCompleted) {
 clearInterval(obj.timer);

 if (typeof callback === 'function') {
  callback();
 }

 }
 }, 30);
 }

};

以上就是描述了javascript实现网页中涉及的简易运动的方法,希望对大家实现javascript简易运动有所启发。

Javascript 相关文章推荐
jQuery初学:find()方法及children方法的区别分析
Jan 31 Javascript
javascript中关于break,continue的特殊用法与介绍
May 24 Javascript
js操纵跨frame的三级联动select下拉选项实例介绍
May 19 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
Nov 22 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
Sep 05 Javascript
jQuery下拉菜单的实现代码
Nov 03 Javascript
JS实现颜色梯度与渐变效果完整实例
Dec 30 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
BootStrap导航栏问题记录
Jul 31 Javascript
JavaScript实现的原生态兼容IE6可调可控滚动文字功能详解
Sep 19 Javascript
validform表单验证的实现方法
Mar 08 Javascript
详解JavaScript中关于this指向的4种情况
Apr 18 Javascript
通用javascript代码判断版本号是否在版本范围之间
Nov 29 #Javascript
jQuery如何使用自动触发事件trigger
Nov 29 #Javascript
js性能优化技巧
Nov 29 #Javascript
javascript实现C语言经典程序题
Nov 29 #Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 #Javascript
整理Javascript基础入门学习笔记
Nov 29 #Javascript
jquery+json实现数据二级联动的方法
Nov 28 #Javascript
You might like
最令PHP初学者头痛的十四个问题
2006/07/12 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
jquery 根据name名获取元素的value值
2015/02/27 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
详解javascript跨浏览器事件处理程序
2016/03/27 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
2018/03/14 Javascript
vue axios登录请求拦截器
2018/04/02 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
详解为什么Vue中的v-if和v-for不建议一起用
2021/01/13 Vue.js
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
[01:09:20]NB vs NAVI Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
pandas 选取行和列数据的方法详解
2019/08/08 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
如何理解python中数字列表
2020/05/29 Python
python之openpyxl模块的安装和基本用法(excel管理)
2021/02/03 Python
退税申请报告怎么写
2015/05/18 职场文书
深入浅析Redis 集群伸缩原理
2021/05/15 Redis
alibaba seata服务端具体实现
2022/02/24 Java/Android
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS