js运动事件函数详解


Posted in Javascript onOctober 21, 2016

本文实例为大家分享了js运动事件函数,供大家参考,具体内容如下

HTML

<div id="breedsdog">
<h2 class="title">The Dog</h2>
<p class="describe">Split between cat,belong to the cat family,cat,cat,is the world's more widely<br>
in the family pet.Cats ancestors is presumably desert cats</p>
<div class="breedsdog1">
<div class="img">
<img src="img2/labrador.jpg"/>
<a class="lookdog" href="#"></a>
</div>
<div class="img_txt">
<p class="chinese">拉布拉多</p>
<p class="english">Labrador</p>
<p class="introduce">
拉布拉多猎犬因原产地在加拿大的纽芬兰与拉布拉多省而得名。拉布拉多犬是一种中大型犬类,个性忠诚、大气、憨厚、温和、阳光、开朗、活泼,智商极高,也对人很友善,是非常适合被选作经常出入公共场合的导盲犬或地铁警犬及搜救犬和其他工作犬的狗品种,跟哈士奇(西伯利亚雪撬犬)和金毛猎犬并列三大无攻击性犬类,拉布拉多智商位列世界犬类第七。
</p>
</div>
</div>

</div>

CSS布局样式省略

现在a.lookdog的样式我设为position:absolutely,宽高设为0。实现的特效:当鼠标移入div.img上,实现a.lookdog的宽高自动展开的缓冲动画,并且展开完毕后,透明度变低的遮罩背景图层。当然我们用css3也能实现这种特效,但是css3的坑是不完全支持IE浏览器,所以用javascript来实现运动缓冲动画是最理想的。

javascript

函数封装部分

//根据类名和父对象ID获取属性节点,解决getelementsByClass对浏览器的兼容性问题

function getbyclass(classname,parent){

    //传入ID获取父节点,如果该参数为空就为document

 
var oParent=parent?document.getElementById(parent):document;

    //定义一个空数组来存放属性节点
 var els=[];

    //定义一个数组存放父对象的所有子节点

 
var elements=oParent.getElementsByTagName("*");

    //遍历所有子节点,根据类名把所有的子对象找出来,并且放在els数组内
 for(var i=0;i<elements.length;i++){
 if(elements[i].className==classname){
 els.push(elements[i]);
 }
 }
 return els;
 }

//根据对象要获取的属性名来得到属性值

function getStyle(obj,stylename){

    //针对IE浏览器获取样式方法
if(obj.currentStyle){
return obj.currentStyle[stylename];

    //针对其他浏览器获取样式方法
}else if(getComputedStyle(obj,false)){
return getComputedStyle(obj,false)[stylename];
}
}

//缓冲动画主函数,传参类型:(对象,jaso格式要改变的样式值(可多个),缓冲系数,执行周期时间(值越小速度越快,越大越慢),回调函数(是否有多次动画的播放,可有可无))

function MoveJason(obj,jason,average,cycle,continuefunction){
clearInterval(obj.timer);
obj.timer=setInterval(function(){
for(var stylename in jason){//针对多效果的缓冲动画
// obj.style[stylename]=jason[stylename];
// }
if(stylename=="opacity"){
var offvalue=Math.round(parseFloat(getStyle(obj,stylename))*100);
var speed=(jason[stylename]-offvalue)/average;
  speed=speed>0?Math.ceil(speed):Math.floor(speed);
  if(speed==0){
clearInterval(obj.timer);
if(continuefunction) continuefunction();//回调函数,判断是否有多次执行
  }else{
obj.style[stylename]=(offvalue+speed)/100;
obj.style.filter="alpha(opacity:"+(offvalue+speed)+")";
  }
}else{
var offvalue=parseInt(getStyle(obj,stylename));
var speed=(jason[stylename]-offvalue)/average;
  speed=speed>0?Math.ceil(speed):Math.floor(speed);
  if(speed==0){
clearInterval(obj.timer);
if(continuefunction) continuefunction();
  }else{
obj.style[stylename]=offvalue+speed+"px";
  }
  }
}
},cycle);
}

页面初始化函数,方法调用

window.onload=function(){

var imgdog=getbyclass("img","breedsdog");//在父对象breedsdog上找到所有的div.img

    //给所有的div.img添加鼠标移入,鼠标移出事件
for(var i=0;i<imgdog.length;i++){

imgdog[i].onmouseover=function(){
var obj=this.children[1];
            MoveJason(obj,{"height":376,"width":206},5,30,function(){//缓冲动画的函数调用,当执行完宽高值的缓冲变化,再回调函数执行透明度缓冲变化。以下同理,可以多层嵌套实现多个回调。
        MoveJason(obj,{"opacity":30},5,30);
    });
}
imgdog[i].onmouseout=function(){
var obj=this.children[1];
            MoveJason(obj,{"height":0,"width":0},5,30,function(){
        MoveJason(obj,{"opacity":80},5,30);
    });
}
}

}

鼠标移入移出效果图如下,我多加个了几个div.img,可以看到等宽高变完,然后透明度发生变化。

js运动事件函数详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript与函数式编程解释
Apr 27 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
Apr 26 Javascript
Json序列化和反序列化方法解析
Dec 19 Javascript
js函数定时器实现定时读取系统实时连接数
Apr 30 Javascript
JavaScript多并发问题如何处理
Oct 28 Javascript
jQuery动态加载css文件实现方法
Jun 15 Javascript
javaScript事件机制兼容【详细整理】
Jul 23 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
Sep 21 Javascript
js实现适合新闻类图片的轮播效果
Feb 05 Javascript
uni-app如何实现增量更新功能
Jan 03 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
Apr 03 Javascript
JavaScript组合模式---引入案例分析
May 23 Javascript
javascript轮播图算法
Oct 21 #Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
Oct 21 #Javascript
javascript简易画板开发
Apr 12 #Javascript
基于angular中的重要指令详解($eval,$parse和$compile)
Oct 21 #Javascript
BootStrap轻松实现微信页面开发代码分享
Oct 21 #Javascript
浅谈angularjs module返回对象的坑(推荐)
Oct 21 #Javascript
浅谈Angularjs link和compile的使用区别
Oct 21 #Javascript
You might like
php判断字符以及字符串的包含方法属性
2008/08/30 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
对YUI扩展的Gird组件 Part-2
2007/03/10 Javascript
解析瀑布流布局:JS+绝对定位的实现
2013/05/08 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
JS组件Bootstrap Table表格行拖拽效果实现代码
2020/08/27 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
js实现横向拖拽导航条功能
2017/02/17 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
Three.js基础学习教程
2017/11/16 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
node.js实现带进度条的多文件上传
2020/03/27 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
python通过wxPython打开一个音频文件并播放的方法
2015/03/25 Python
python根据出生年份简单计算生肖的方法
2015/03/27 Python
python网络编程之文件下载实例分析
2015/05/20 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
大学生毕业自我鉴定范文
2013/09/19 职场文书
保险公司早会主持词
2014/03/22 职场文书
产品推广策划方案
2014/05/10 职场文书
执行力心得体会范文
2016/01/11 职场文书