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 相关文章推荐
js 加载并解析XML字符串的代码
Dec 13 Javascript
javascript 哈希表(hashtable)的简单实现
Jan 20 Javascript
基于jquery的3d效果实现代码
Mar 23 Javascript
ajax处理php返回json数据的实例代码
Jan 24 Javascript
jQuery代码实现对话框右上角菜单带关闭×
May 03 Javascript
浅析Node.js实现HTTP文件下载
Aug 05 Javascript
jQuery组件easyui基本布局实现代码
Aug 25 Javascript
80%应聘者都不及格的JS面试题
Mar 21 Javascript
angular实现input输入监听的示例
Aug 31 Javascript
Vue.js实现的购物车功能详解
Jan 27 Javascript
vue和better-scroll实现列表左右联动效果详解
Apr 29 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
Sep 20 Javascript
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
更改localhost为其他名字的方法
2014/02/10 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
js编写当天简单日历效果【实现代码】
2016/05/03 Javascript
一个例子轻松学会Vue.js
2017/01/02 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
node.js基础知识小结
2018/02/26 Javascript
vue的for循环使用方法
2019/02/12 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
基于python神经卷积网络的人脸识别
2018/05/24 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
css3过渡_动力节点Java学院整理
2017/07/11 HTML / CSS
英语自荐信范文
2013/12/11 职场文书
岗位职责风险防控
2014/02/18 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
中学生运动会口号
2014/06/07 职场文书
调研汇报材料范文
2014/08/17 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
骨干教师考核评语
2014/12/31 职场文书
承诺书范本
2015/01/21 职场文书
年会邀请函范文
2015/01/30 职场文书
合理化建议书
2015/02/04 职场文书
清洁工个人工作总结
2015/03/05 职场文书
经典爱情感言
2015/08/03 职场文书
教师网络培训心得体会
2016/01/09 职场文书
八年级物理教学反思
2016/02/19 职场文书
小学思品教学反思
2016/02/20 职场文书