我是靠谱客的博主 大力金针菇,最近开发中收集的这篇文章主要介绍004_JS封装简单动画函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言:

        使用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封装简单动画函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部