概述
前言:
使用JavaScript,主要是用于完成一些页面上的特效,今天就带领大家一起,封装一个简单的函数。写好了之后,完全可以存起来,今后各种调用就好。
原理:
- 根据传入的位置(target),使对象(obj),按一定的速度(speed)去改变自 己的样式(attr),当该函数(move)执行完毕之后,调用回调函(callback)。
注意:
- 为了避免多次点击造成定时器的多次调用,在每一次调用定时器之前,应该关闭 上一次的定时器。
- 定时器应该加在对象的属性中,而不是全局变量。
- 移动的速度和目标和起点之间,可能不能整除,所以要手动的让对象最后刚好在 目标位置上。
- 动画执行完毕之后,应该手动的关闭定时器。
- 回调函数是选传,需要处理没有传入的情况。
代码:
/
/**
* @desc:执行简单动画
* @param {Object} obj:待执行动画的元素。
* @param {String} attri:动画的元素(比如width,left)
* @param {Number} target:终点值。
* @param {Number} speed:动画的执行速度。
* @param {Function} callback:动画完成之后的回调函数。
*/
function move(obj, attr, target, speed, callback) {
//关闭上一个定时器(定时器是加在目标对象中的,多个对象调用move函数,不会被clearInterval)
clearInterval(obj.timer);
//获取元素目前的位置
var current = parseInt(getStyle(obj, attr));
//判断速度的正负值
if(current > target) {
//此时速度应为负值
speed = -speed;
}
//开启一个定时器,用来执行动画效果
//向执行动画的对象中添加一个timer属性,用来保存它自己的定时器的标识
obj.timer = setInterval(function() {
//获取box1的原来的left值
var oldValue = parseInt(getStyle(obj, attr));
//在旧值的基础上增加
var newValue = oldValue + speed;
//解决误差值
//向左移动时,需要判断newValue是否小于target
//向右移动时,需要判断newValue是否大于target
if((speed < 0 && newValue < target) || (speed > 0 && newValue > target)) {
newValue = target;
}
//设置新值
obj.style[attr] = newValue + "px";
//当元素移动到target时,使其停止执行动画
if(newValue == target) {
//达到目标,关闭定时器
clearInterval(obj.timer);
//动画执行完毕,调用回调函数,根据是否传参,决定是否执行
callback && callback();
}
}, 30);
}
/*
* 定义一个函数,用来获取指定元素的当前的样式
* 参数:
* obj 要获取样式的元素
* name 要获取的样式名
*/
function getStyle(obj, name) {
if(window.getComputedStyle) {
//正常浏览器的方式,具有getComputedStyle()方法
return getComputedStyle(obj, null)[name];
} else {
//IE8的方式,没有getComputedStyle()方法
return obj.currentStyle[name];
}
}
有了以上代码,就可以简单的实现一个二级菜单了:
最后
以上就是大力金针菇为你收集整理的004_JS封装简单动画函数的全部内容,希望文章能够帮你解决004_JS封装简单动画函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复