zoukankan      html  css  js  c++  java
  • tool.js

    //尝试创建一个可以执行简单动画的函数
    /*
     * 参数:
     * 	obj:要执行动画的对象
     * 	attr:要执行动画的样式,比如:left top width height
     * 	target:执行动画的目标位置
     * 	speed:移动的速度(正数向右移动,负数向左移动)
     *  callback:回调函数,这个函数将会在动画执行完毕以后执行
     */
    function move(obj, attr, target, speed, callback) {
    	//关闭上一个定时器
    	clearInterval(obj.timer);
    
    	//获取元素目前的位置
    	var current = parseInt(getStyle(obj, attr));
    
    	//判断速度的正负值
    	//如果从0 向 800移动,则speed为正
    	//如果从800向0移动,则speed为负
    	if(current > target) {
    		//此时速度应为负值
    		speed = -speed;
    	}
    
    	//开启一个定时器,用来执行动画效果
    	//向执行动画的对象中添加一个timer属性,用来保存它自己的定时器的标识
    	obj.timer = setInterval(function() {
    
    		//获取box1的原来的left值
    		var oldValue = parseInt(getStyle(obj, attr));
    
    		//在旧值的基础上增加
    		var newValue = oldValue + speed;
    
    		//判断newValue是否大于800
    		//从800 向 0移动
    		//向左移动时,需要判断newValue是否小于target
    		//向右移动时,需要判断newValue是否大于target
    		if((speed < 0 && newValue < target) || (speed > 0 && newValue > target)) {
    			newValue = target;
    		}
    
    		//将新值设置给box1
    		obj.style[attr] = newValue + "px";
    
    		//当元素移动到0px时,使其停止执行动画
    		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];
    	}
    
    }
    
    //定义一个函数,用来向一个元素中添加指定的class属性值
    /*
     * 参数:
     * 	obj 要添加class属性的元素
     *  cn 要添加的class值
     * 	
     */
    function addClass(obj, cn) {
    
    	//检查obj中是否含有cn
    	if(!hasClass(obj, cn)) {
    		obj.className += " " + cn;
    	}
    
    }
    
    /*
     * 判断一个元素中是否含有指定的class属性值
     * 	如果有该class,则返回true,没有则返回false
     * 	
     */
    function hasClass(obj, cn) {
    
    	//判断obj中有没有cn class
    	//创建一个正则表达式
    	//var reg = /b2/;
    	var reg = new RegExp("\b" + cn + "\b");
    
    	return reg.test(obj.className);
    
    }
    
    /*
     * 删除一个元素中的指定的class属性
     */
    function removeClass(obj, cn) {
    	//创建一个正则表达式
    	var reg = new RegExp("\b" + cn + "\b");
    
    	//删除class
    	obj.className = obj.className.replace(reg, "");
    
    }
    
    /*
     * toggleClass可以用来切换一个类
     * 	如果元素中具有该类,则删除
     * 	如果元素中没有该类,则添加
     */
    function toggleClass(obj, cn) {
    
    	//判断obj中是否含有cn
    	if(hasClass(obj, cn)) {
    		//有,则删除
    		removeClass(obj, cn);
    	} else {
    		//没有,则添加
    		addClass(obj, cn);
    	}
    
    }
    
  • 相关阅读:
    TIOBE2017榜单公布_PHP还会是世界上最好的语言吗?
    一个优秀的程序猿应该具备哪些技能?
    7月10日云栖精选夜读:看阿里云窄带高清如何支援优酷 让《楚乔传》更清晰
    如何修复Kindle频繁自动锁屏和解锁
    CentOS 7 配置nginx的service 脚本例子
    Linux系统磁盘分区(逻辑卷LVM)的扩充
    CentOS6.7配置软raid5(模拟故障增加硬盘)
    运行软件显示:缺少packet.dll文件
    《需求工程——软件建模》06
    《需求工程——软件建模》05
  • 原文地址:https://www.cnblogs.com/TomHe789/p/12734881.html
Copyright © 2011-2022 走看看