JS运动特效之链式运动分析


Posted in Javascript onJanuary 24, 2018

本文实例讲述了JS运动特效之链式运动。分享给大家供大家参考,具体如下:

接着前面一篇《JS运动特效之任意值添加运动的方法》继续折腾

链式运动:一个运动接着一个运动。比如:鼠标移入div先让宽变大,接着在让高变大,接着在让透明度变化等等一系列运动连着做。废话不多说,上栗子!!

JS运动特效之链式运动分析

当鼠标移入div的时候,div先变宽,在变高,然后改变透明度;移出又逐次恢复到原样;

实现链式运动,需要对上一篇中的startMove() 函数继续做改进

function startMove(obj,attr,iTarget,fn) 多传入一个fn参数,表示当一个运动结束之后,继续进行下一个运动,当然还需要判断一下,如果有下一个运动,就执行下一个运动,如果没有就继续向下执行

if(fn){
  fn();
}

完整测试代码:

HTML部分:

<body>
<div id="div1"></div>
</body>

css部分:

<style>
  #div1{
   width: 200px;height: 200px;
   background: green;
  }
</style>

js部分:

<script>
  window.onload = function(){
   var oDiv = document.getElementById('div1');
   oDiv.onmouseover = function () {
    startMove(oDiv,'width',300,function () {
     startMove(oDiv,'height',300, function () {
      startMove(oDiv,'opacity',30);
     });
    });
   }
   oDiv.onmouseout = function () {
    startMove(oDiv,'opacity',100, function () {
     startMove(oDiv,'height',200, function () {
      startMove(oDiv,'width',200);
     });
    });
   }
  }
  function getStyle(obj,attr){
   return getComputedStyle ? getComputedStyle(obj,false)[attr] : obj.currentStyle[attr];
  }
  function startMove(obj,attr,iTarget,fn) {//fn:执行下一个运动的函数
   clearInterval(obj.timer);
   obj.timer = setInterval(function () {
    var objAttr = 0;
    if(attr == "opacity"){
     objAttr = Math.round(parseFloat(getStyle(obj,attr))*100);
    }else{
     objAttr = parseInt(getStyle(obj,attr));
    }
    var iSpeed = (iTarget -objAttr)/10;
    iSpeed = iSpeed>0 ?Math.ceil(iSpeed):Math.floor(iSpeed);
    if(objAttr == iTarget){
     clearInterval(obj.timer);
     if(fn){// 如果传了 “下一个运动的函数” 就执行
      fn();
     }
    }else{
     if(attr == "opacity"){
      obj.style.filter = 'alpha(opacity:'+(objAttr+iSpeed)+')';
      obj.style.opacity = (objAttr+iSpeed)/100;
     }else{
      obj.style[attr] = objAttr+iSpeed+'px';
     }
    }
   },30);
  }
</script>

未完待续....

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
ExtJS 2.0实用简明教程之应用ExtJS
Apr 29 Javascript
用js控制组织结构图可以任意拖拽到指定位置
Jan 17 Javascript
JavaScript使用cookie记录临时访客信息的方法
Apr 07 Javascript
JS实现简单的二维矩阵乘积运算
Jan 26 Javascript
详解原生js实现offset方法
Jun 15 Javascript
基于Node.js模板引擎教程-jade速学与实战1
Sep 17 Javascript
vue项目部署上线遇到的问题及解决方法
Jun 10 Javascript
实例分析vue循环列表动态数据的处理方法
Sep 28 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
May 16 Javascript
vue中使用elementUI组件手动上传图片功能
Dec 13 Javascript
JS的时间格式化和时间戳转换函数示例详解
Jul 27 Javascript
Vue实现小购物车功能
Dec 21 Vue.js
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
Jan 24 #Javascript
JS运动特效之任意值添加运动的方法分析
Jan 24 #Javascript
bootstrap 点击空白处popover弹出框隐藏实例
Jan 24 #Javascript
详解node child_process模块学习笔记
Jan 24 #Javascript
浅谈Node.js 子进程与应用场景
Jan 24 #Javascript
除Console.log()外更多的Javascript调试命令
Jan 24 #Javascript
深入理解node.js http模块
Jan 24 #Javascript
You might like
关于拼配咖啡,你要知道
2021/03/03 咖啡文化
php 获取客户端的真实ip
2009/11/30 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
简单解决新浪SAE无法上传文件的问题
2015/05/13 PHP
php计算整个目录大小的方法
2015/06/01 PHP
详解PHP错误日志的获取方法
2015/07/20 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
vue使用lodop打印控件实现浏览器兼容打印的方法
2021/02/07 Vue.js
[00:11]战神迅矛
2019/03/06 DOTA
Python如何实现守护进程的方法示例
2017/02/08 Python
python导入模块交叉引用的方法
2019/01/19 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
2019/10/04 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
Pandas的Apply函数具体使用
2020/07/21 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
史泰博(Staples)中国官方网站:办公用品一站式采购
2016/09/05 全球购物
护士检查书
2014/01/17 职场文书
大学生求职信范文
2014/05/24 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
2014年创卫工作总结
2014/11/24 职场文书
部门2015年度工作总结
2015/04/29 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
python脚本框架webpy的url映射详解
2021/11/20 Python