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中使用正则匹配多条,且获取每条中的分组数据
Nov 30 Javascript
json原理分析及实例介绍
Nov 29 Javascript
元素绑定click点击事件方法
Jun 08 Javascript
微信QQ的二维码登录原理js代码解析
Jun 23 Javascript
jQuery中slidedown与slideup方法用法示例
Sep 16 Javascript
JS求解三元一次方程组值的方法
Jan 03 Javascript
JavaScript中利用Array filter() 方法压缩稀疏数组
Feb 24 Javascript
npm 更改默认全局路径以及国内镜像的方法
May 16 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
解决vue props 拿不到值的问题
Sep 11 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
Apr 14 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 iconv 函数转gb2312的bug解决方法
2009/10/11 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
php基于curl实现随机ip地址抓取内容的方法
2016/10/11 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
浅谈js闭包理解
2019/03/28 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
vue3.0 上手体验
2020/09/21 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python实现拼接多张图片的方法
2014/12/01 Python
Python文件去除注释的方法
2015/05/25 Python
python删除文本中行数标签的方法
2018/05/31 Python
Python 对输入的数字进行排序的方法
2018/06/23 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
毕业实习评语
2014/02/10 职场文书
公司年会策划方案
2014/05/17 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
实习单位推荐信
2015/03/27 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP
python周期任务调度工具Schedule使用详解
2021/11/23 Python