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中如何判断传过来的JSON数据中是否存在某字段
Aug 18 Javascript
使用正则表达式的格式化与高亮显示json字符串
Dec 03 Javascript
jquery实现具有收缩功能的垂直导航菜单
Feb 16 Javascript
创建一个类Person的简单实例
May 17 Javascript
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
微信小程序下拉刷新界面的实现
Sep 28 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
Dec 05 Javascript
浅谈Vue 数据响应式原理
May 07 Javascript
vue+element 模态框表格形式的可编辑表单实现
Jun 07 Javascript
细述Javascript的加法运算符的具体使用
Oct 18 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 Javascript
vue使用一些外部插件及样式的配置代码
Nov 18 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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
destoon供应信息title调用出公司名称的方法
2014/08/22 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
Python实现购物系统(示例讲解)
2017/09/13 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
Python创建临时文件和文件夹
2020/08/05 Python
python批量修改交换机密码的示例
2020/09/22 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
介绍Java的内部类
2012/10/27 面试题
体育教育毕业生自荐信
2013/11/21 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
春节联欢会主持词
2014/03/24 职场文书
英文感谢信范文
2015/01/21 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
mysql配置SSL证书登录的实现
2021/09/04 MySQL
Oracle中update和select 关联操作
2022/01/18 Oracle
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android
Oracle中DBLink的详细介绍
2022/04/29 Oracle