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 相关文章推荐
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
Jul 15 Javascript
用js通过url传参把数据从一个页面传到另一个页面
Sep 01 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
Jun 17 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
Aug 01 Javascript
移动端js触摸事件详解
Sep 18 Javascript
jquery实现左右滑动式轮播图
Mar 02 Javascript
jQuery实现简单的抽奖游戏
May 05 jQuery
微信小程序实现动态设置页面标题的方法【附源码下载】
Nov 29 Javascript
jQuery中复合选择器简单用法示例
Mar 31 jQuery
JS判断字符串是否为整数的方法--简单的正则判断
Jul 23 Javascript
深入详解JS函数的柯里化
Jun 09 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 图像尺寸调整代码
2010/05/26 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
php中namespace use用法实例分析
2016/01/22 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
javascript中万恶的function实例分析
2011/05/25 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
基于jQuery实现的查看全文功能【实用】
2016/12/11 Javascript
js模糊查询实例分享
2016/12/26 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
JavaScript提高加载和执行效率的方法
2017/02/03 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
python实现的一个p2p文件传输实例
2014/06/04 Python
整理Python最基本的操作字典的方法
2015/04/24 Python
讲解Python中fileno()方法的使用
2015/05/24 Python
使用python3.5仿微软记事本notepad
2016/06/15 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
详解selenium + chromedriver 被反爬的解决方法
2020/10/28 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
东南亚地区最大的购物网站Lazada新加坡站点:Lazada.sg
2016/07/17 全球购物
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
教您怎么制定西餐厅运营方案 ?
2019/07/05 职场文书
MySQL 亿级数据导入导出及迁移笔记
2021/06/18 MySQL
SQL注入详解及防范方法
2021/12/06 MySQL
redis 解决库存并发问题实现数量控制
2022/04/08 Redis
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang