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 相关文章推荐
破解Session cookie的方法
Jul 28 Javascript
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
Jun 20 Javascript
图片动画横条广告带上下滚动的JS代码
Oct 25 Javascript
js跨域访问示例(客户端/服务端)
May 19 Javascript
JavaScript获取中英文混合字符串长度的方法示例
Feb 04 Javascript
vue.js开发环境搭建教程
May 04 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
node.js调用Chrome浏览器打开链接地址的方法
May 17 Javascript
vue2组件之select2调用的示例代码
Oct 12 Javascript
详解几十行代码实现一个vue的状态管理
Jan 28 Javascript
Javascript异步执行不按顺序解决方案
Apr 30 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(3)
2006/10/09 PHP
php中get_headers函数的作用及用法的详细介绍
2013/04/27 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
怎么判断js脚本加载完成
2014/02/28 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
微信小程序通过api接口将json数据展现到小程序示例
2017/01/20 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
深入浅析js原型链和vue构造函数
2018/10/25 Javascript
Vue根据条件添加click事件的方式
2019/11/09 Javascript
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
python语言使用技巧分享
2016/05/31 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
python 列表删除所有指定元素的方法
2018/04/19 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
大专计算机个人求职的自我评价
2013/10/21 职场文书
小学生获奖感言范文
2014/02/02 职场文书
财务出纳岗位职责
2014/02/03 职场文书
庆元旦演讲稿
2014/09/15 职场文书
初中信息技术教学计划
2015/01/22 职场文书
员工表扬信怎么写
2015/05/05 职场文书
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS