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 相关文章推荐
基于jquery实现在线选座订座之影院篇
Aug 24 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
Apr 19 Javascript
深入理解Javascript中的观察者模式
Feb 20 Javascript
jQuery获取table下某一行某一列的值实现代码
Apr 07 jQuery
Angular4实现鼠标悬停3d倾斜效果
Oct 25 Javascript
浅析Visual Studio Code断点调试Vue
Feb 27 Javascript
JavaScript中import用法总结
Jan 20 Javascript
vue实现跨域的方法分析
May 21 Javascript
vue柱状进度条图像的完美实现方案
Aug 26 Javascript
vue本地打开build后生成的dist文件夹index.html问题
Sep 04 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
Mar 11 Javascript
详解react组件通讯方式(多种)
May 06 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
咖啡豆要不要放冰箱的原因
2021/03/04 冲泡冲煮
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
json数据格式常见操作示例
2019/06/13 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
python根据文件大小打log日志
2014/10/09 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python实现邮件发送功能
2019/08/10 Python
Python笔记之facade模式
2019/11/20 Python
Python如何使用函数做字典的值
2019/11/30 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
python 发送邮件的示例代码(Python2/3都可以直接使用)
2020/12/03 Python
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
机械工程师求职自我评价
2013/09/23 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
社区安全检查制度
2014/02/03 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
春节晚会主持词
2014/03/24 职场文书
怎样填写就业意向
2014/04/02 职场文书
有关环保的标语
2014/06/13 职场文书
法定代表人授权委托书
2014/09/19 职场文书
工作失职检讨书
2015/01/26 职场文书
人力资源部岗位职责
2015/02/11 职场文书
通知书大全
2015/04/27 职场文书
了解Redis常见应用场景
2021/06/23 Redis
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL