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 相关文章推荐
最佳JS代码编写的14条技巧
Jan 09 Javascript
实例讲解JS中数组Array的操作方法
May 09 Javascript
BootStrap制作导航条实例代码
May 06 Javascript
底部悬浮通栏可以关闭广告位的实现方法
Jun 01 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
Aug 14 Javascript
js实现上传并压缩图片效果
Jan 10 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
layui表格内放置图片,并点击放大的实例
Sep 10 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
Sep 25 Javascript
在vue中根据光标的显示与消失实现下拉列表
Sep 29 Javascript
node.js中事件触发器events的使用方法实例分析
Nov 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学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
并发下常见的加锁及锁的PHP具体实现代码
2010/10/12 PHP
php数组合并array_merge()函数使用注意事项
2014/06/19 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
PHP+Session防止表单重复提交的解决方法
2018/04/09 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
JS控制HTML元素的显示和隐藏的两种方法
2016/09/27 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
python实现线程池的方法
2015/06/30 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
sublime python3 输入换行不结束的方法
2018/04/19 Python
python读取一个目录下所有txt里面的内容方法
2018/06/23 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
python中count函数简单用法
2020/01/05 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
python实现三种随机请求头方式
2021/01/05 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
利用python实现汉诺塔游戏
2021/03/01 Python
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
超市营业员岗位职责
2013/12/20 职场文书
保安拾金不昧表扬信
2014/01/15 职场文书
小学生开学第一课活动方案
2014/03/27 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
走群众路线剖析材料
2014/10/09 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书