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 相关文章推荐
JQuery里选择超链接的实现代码
May 22 Javascript
根据json字符串生成Html的一种方式
Jan 09 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
Sep 10 Javascript
关于iframe跨域POST提交的方法示例
Jan 15 Javascript
vue.js全局API之nextTick全面解析
Jul 07 Javascript
详解jQuery中关于Ajax的几个常用的函数
Jul 17 jQuery
javascript将json格式数组下载为excel表格的方法
Dec 22 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
Jul 17 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
Jan 27 Javascript
微信小程序之 catalog 切换实现解析
Sep 12 Javascript
基于vue.js仿淘宝收货地址并设置默认地址的案例分析
Aug 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
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
11款基于Javascript的文件管理器
2009/10/25 Javascript
JQuery live函数
2010/12/24 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
jquery实现的V字形显示效果代码
2015/10/27 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
java必学必会之static关键字
2015/12/03 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
BootStrap+Mybatis框架下实现表单提交数据重复验证
2017/03/23 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
2017/09/01 jQuery
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
js实现网页随机验证码
2020/10/19 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
用python代码做configure文件
2014/07/20 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
python实现大量图片重命名
2020/03/23 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
SQL Server里面什么样的视图才能创建索引
2015/04/17 面试题
六个一活动实施方案
2014/03/21 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
小学语文教学经验交流材料
2014/06/02 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书