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下查找父节点的简单方法
Aug 13 Javascript
用js查找法实现当前栏目的高亮显示的代码
Nov 24 Javascript
Javascript的常规数组和关联数组对比小结
May 24 Javascript
js将控件隐藏的方法及display属性介绍
Jul 04 Javascript
setTimeout()与setInterval()方法区别介绍
Dec 24 Javascript
jQuery检测滚动条是否到达底部
Dec 15 Javascript
JS实现touch 点击滑动轮播实例代码
Jan 19 Javascript
layui分页效果实现代码
May 19 Javascript
Vue中实现权限控制的方法示例
Jun 07 Javascript
JavaScript一元正号运算符示例代码
Jun 30 Javascript
Nuxt的动态路由和参数校验操作
Nov 09 Javascript
vue+elementUI实现表格列的显示与隐藏
Apr 13 Vue.js
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基础学习笔记
2007/03/18 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
NodeJS学习笔记之Connect中间件模块(二)
2015/01/27 NodeJs
AngularJS实现表单验证
2015/01/28 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
js实现购物车功能
2018/06/12 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
Python中多线程thread与threading的实现方法
2014/08/18 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
Python列表推导式与生成器用法分析
2018/08/02 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
Python之变量类型和if判断方式
2020/05/05 Python
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
个人作风剖析材料
2014/02/02 职场文书
开门红主持词
2014/04/02 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
律师授权委托书范本
2014/10/07 职场文书
本溪水洞导游词
2015/02/11 职场文书
关于分班的感言
2015/08/04 职场文书
2016创先争优活动党员公开承诺书
2016/03/24 职场文书