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 相关文章推荐
javascript得到XML某节点的子节点个数的脚本
Oct 11 Javascript
js截取小数点后几位的写法
Nov 14 Javascript
javascript获取dom的下一个节点方法
Sep 05 Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 Javascript
JavaScript中的原型继承基础学习教程
May 06 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
Feb 25 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
Angular.js中$apply()和$digest()的深入理解
Oct 13 Javascript
jQuery实现的弹幕效果完整实例
Sep 06 jQuery
vue2.0在table中实现全选和反选的示例代码
Nov 04 Javascript
Node.js API详解之 assert模块用法实例分析
May 26 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
短波收音机简介
2021/03/01 无线电
php实现mysql数据库备份类
2008/03/20 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
基于JS实现父组件的请求服务过程解析
2019/10/14 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
[36:54]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python元组操作实例解析
2014/09/23 Python
理论讲解python多进程并发编程
2018/02/09 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
CSS3弹性盒模型开发笔记(二)
2016/04/26 HTML / CSS
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
Aosom西班牙:家具在线商店
2020/06/11 全球购物
学前教育学生自荐信范文
2013/12/31 职场文书
美容院考勤制度
2014/01/30 职场文书
2014庆六一活动方案
2014/03/02 职场文书
2014年小学语文工作总结
2014/12/20 职场文书
市场部岗位职责范本
2015/04/15 职场文书
企业党支部工作总结2015
2015/05/21 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js