<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Animate</title>
<script>
(
function(){
if(!window.dk){window['dk']={} }
//根据ID获取对象
function $(){
if(typeof(arguments[0]) == 'string')
return document.getElementById(arguments[0]);
else
return arguments[0];
}
window['dk']['$']=$;
//根据Class名称获取对象
function getElementByClassName(){};
window['dk']['getElementByClassName']=getElementByClassName;
//绑定事件
function addEvent(node,type,listener){
//if(!(node=$(node))){return false;}
if(node.addEventListener){
node.addEventListener(type,listener,false);
return true;
}
else if(node.attachEvent){
node['e'+type+listener]=listener;
node[type+listener]=function(){
node['e'+type+listener](window.event);
}
node.attachEvent('on'+type,node[type+listener]);
return true;
}
return false;
}
window['dk']['addEvent']=addEvent;
//移出绑定的事件
function removeEvent(node, type, listener){
if(node.removeEventListener){
node.removeEventListener(type,listener,false);
return true;
}else if(node.detachEvent){
node.detachEvent('on' + type, node[type+listener]);
node[type + listener] = null;
return true;
}
return false;
}
window['dk']['removeEvent'] = removeEvent;
//绑定函数的执行对象
function bind(targetObj,func){
var args = Array.prototype.slice.call(arguments).slice(2);
return function() {
return func.apply(targetObj, args.concat(Array.prototype.slice.call(arguments)));
}
}
window['dk']['bind']=bind;
//检查childNode是被包含在parentNode中
function contains(parentNode,childNode){
return parentNode.contains ? parentNode != childNode && parentNode.contains(childNode) : !!(parentNode.compareDocumentPosition(childNode) & 16);
}
window['dk']['contains']=contains;
//获取Event对象
function getEvent(e){
return e || window.event;
}
window['dk']['getEvent']=getEvent;
//停止冒泡
function stopBubble(e){
getEvent(e).bubbles?getEvent(e).stopPropagation():getEvent(e).cancelBubble=true;
}
window['dk']['stopBubble']=stopBubble;
//恢复冒泡
function startBubble(e){
getEvent(e).initEvent?getEvent(e).initEvent():getEvent(e).cancelBubble=false;
}
window['dk']['startBubble']=startBubble;
//检查mouseover和mouseout模式下取消事件派发
function checkHover(e,target){
if(dk.getEvent(e).type=="mouseover"){
return !contains(target,getEvent(e).relatedTarget||getEvent(e).fromElement) && !((getEvent(e).relatedTarget||getEvent(e).fromElement)===target);
}
else{
return !contains(target,getEvent(e).relatedTarget||getEvent(e).toElement) && !((getEvent(e).relatedTarget||getEvent(e).toElement)===target);
}
}
window['dk']['checkHover']=checkHover;
//获取事件触发的对象
function getEventTarget(e){
return dk.getEvent(e).target || dk.getEvent(e).srcElement;
}
window['dk']['getEventTarget']=getEventTarget;
//获取窗口的大小
function getBrowserSize(){
var de=document.documentElement;
return {
width:(window.innerWidth||(de&&de.clientWidth)||document.body.clientWidth),
height:(window.innerHeight||(de&&de.clientHeight)||document.body.clientHeight)}
}
window['dk']['getBrowserSize']=getBrowserSize;
//获取对象在页面中的位置
function getPositionInDoc(target){
(typeof(target) == 'string') && (target = document.getElementById(target));
var left = 0, top = 0;
do {
left += target.offsetLeft || 0;
top += target.offsetTop || 0;
target = target.offsetParent;
}
while (target);
return {
left: left,
top: top
};
}
window['dk']['getPositionInDoc'] = getPositionInDoc;
window['dk']['pageDom'] = getPositionInDoc;
//获取鼠标在Document中的位置
function getMousePositionInDoc(e){
var scrollx, scrolly;
if (typeof(window.pageXOffset) == 'number') {
scrollx = window.pageXOffset;
scrolly = window.pageYOffset;
}
else {
scrollx = document.documentElement.scrollLeft;
scrolly = document.documentElement.scrollTop;
}
return {
x: e.clientX + scrollx,
y: e.clientY + scrolly
}
}
window['dk']['getMousePositionInDoc'] = getMousePositionInDoc;
window['dk']['pageMouse'] = getMousePositionInDoc;
//日志
function myLogs(id){
id=id||'defaultDebugLogs';
var logsWindow=null;
var initWindow=function(){
logsWindow=document.createElement('ol');
logsWindow.setAttribute('id',id);
var winStyle=logsWindow.style;
winStyle.position='absolute';
winStyle.top='10px';
winStyle.right='10px'
winStyle.width='200px';
winStyle.height='300px';
winStyle.border='1px solid #ccc';
winStyle.background='#fff';
winStyle.padding=0;
winStyle.margin=0;
document.body.appendChild(logsWindow);
}
this.writeRow=function(message){
logsWindow||initWindow();
var newItem=document.createElement('li');
newItem.style.padding='2px';
newItem.style.margin='0 0 1px 0';
newItem.style.background='#eee';
if(typeof(message)=='undefined'){
newItem.innerHTML='<span style=\"color:#f90;\">Message is undefined</span>';
}
else{
newItem.innerHTML=message;
}
logsWindow.appendChild(newItem);
}
} myLogs.prototype={
write:function(message){ if(typeof(message) == 'string'&&message.length==0){
return this.writeRow('<span style=\"color:#900;\">warning:</span> empty message');
}
if(typeof(message) != 'string' && typeof(message) != 'undefined'){
if(message.toString) return this.writeRow(message.toString());
else return this.writeRow(typeof(message));
}
if(typeof(message) == 'undefined'){
return this.writeRow('<span style=\"color:#f90;\">Message is undefined</span>');
}
message=message.replace(/</g,"&lt;").replace(/</g,"&gt;");
return this.writeRow(message);
},
header:function(message){ }
}
window['dk']['logs'] = new myLogs();
//Dom加载完成事件
function ready(loadEvent){
var init = function(){
if(arguments.callee.done)
return;
arguments.callee.done = true;
loadEvent.apply(document,arguments);
} if(document.addEventListener){
document.addEventListener('DOMContentLoaded',init,false);
} if(/WebKit/i.test(navigator.userAgent)){
var _timer = setInterval(function(){
if(/loaded|complete/.test(document.readyState)){
clearInterval(_timer);
init();
}
},10)
} /*@if(@_win32)*/
document.write('<script id=__ie_onload defer src=javascript:void(0)><\/script>');
var script = document.getElementById('__ie_onload');
script.onreadystatechange = function(){
if(this.readyState == 'complete'){
init();
}
}
/*@end @*/
return true;
}
window['dk']['ready'] = ready;
})(); var _$ = function(node){
if(typeof(node) == 'string'){
node = dk.$(node);
}
this.node= node;
}
_$.prototype = {
fixover:function(func){
dk.addEvent(this.node,'mouseover',function(e){
if(dk.checkHover(e,this)){
func(e);
}
});
return this;
},
fixout:function(func){
dk.addEvent(this.node,'mouseout',function(e){
if(dk.checkHover(e,this)){
func(e);
}
})
return this;
},
css:function(styleName){
if (this.node.currentStyle) {
var value = this.node.currentStyle[styleName];
if(value == 'auto' && styleName == 'width'){
value = this.node.clientWidth;
}
if(value == 'auto' && styleName == 'height'){
value = this.node.clientHeight;
}
return value;
}
else if (window.getComputedStyle) {
var value = window.getComputedStyle(this.node, null).getPropertyValue(this.getSplitName(styleName));
return value;
}
},
getSplitName:function(styleName){
return styleName.replace(/([A-Z])/g, '-$1').toLowerCase();
}
}
$$ = function(node){
return new _$(node);
}
var Tween={
Linear: function(t,b,c,d){ return c*t/d + b; },
Quad: {
easeIn: function(t,b,c,d){
return c*(t/=d)*t + b;
},
easeOut: function(t,b,c,d){
return -c *(t/=d)*(t-2) + b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return c/2*t*t + b;
return -c/2 * ((--t)*(t-2) - 1) + b;
}
},
Cubic: {
easeIn: function(t,b,c,d){
return c*(t/=d)*t*t + b;
},
easeOut: function(t,b,c,d){
return c*((t=t/d-1)*t*t + 1) + b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return c/2*t*t*t + b;
return c/2*((t-=2)*t*t + 2) + b;
}
},
Quart: {
easeIn: function(t,b,c,d){
return c*(t/=d)*t*t*t + b;
},
easeOut: function(t,b,c,d){
return -c * ((t=t/d-1)*t*t*t - 1) + b;
},
easeInOut: function(t,b,c,d){
if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
return -c/2 * ((t-=2)*t*t*t - 2) + b;
}
},
Back: {
easeIn: function(t,b,c,d,s){
if (s == undefined) s = 1.70158;
return c*(t/=d)*t*((s+1)*t - s) + b;
},
easeOut: function(t,b,c,d,s){
if (s == undefined) s = 1.70158;
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
},
easeInOut: function(t,b,c,d,s){
if (s == undefined) s = 1.70158;
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
}
}
}
var Motion=function(target){
var t = 0;
var d = 150;
var delayTime = 10;
var styles=null;
var stylesChange={};
var stylesBegin={};
var callBackFunc=null;
var timer=null;
var quickStylesBefore=null;
var quickStylesAfter=null;
var animateStatus=false;
var funcQueue=[];
if(typeof(target)=='string')
target=document.getElementById(target); this.resetStatus=function(){
t=0;
styles=null;
stylesChange={};
stylesBegin={};
callBackFunc=null;
timer=null;
quickStylesBefore=null;
quickStylesAfter=null;
}
this.setDelayTime=function(_delayTime){
delayTime = _delayTime;
}
this.setStyles=function(_styles){
styles=_styles;
}
this.setCallBackFunc=function(_callBackFunc){
callBackFunc=_callBackFunc;
}
this.pushFuncToQueue = function(funcString){
funcQueue.push(funcString);
}
this.getAnimateStatus=function(){
return animateStatus;
}
this.setQuickStyle=function(_quickStyles,quickType){
if(quickType)
quickStylesBefore = _quickStyles;
else
quickStylesAfter = _quickStyles;
}
this.getTargetStyle=function(){
return {width:target.style.width || target.clientWidth,height:target.style.height || target.clientHeigth}
}
var calculatChange=function(){
for(var styleName in styles){
stylesChange[styleName]=parseInt(styles[styleName])-parseInt(target.style[styleName] || 0);
stylesBegin[styleName]=parseInt(target.style[styleName] || 0);
}
} var setTargetStyles=function(_styles){
for(var styleName in _styles){
target.style[styleName]=_styles[styleName];
}
} var beforeRun = function(){
quickStylesBefore && setTargetStyles(quickStylesBefore);
calculatChange();
target.style.display='block';
animateStatus = true;
} this.afterRun = function(){
if(target.style.width=='0px'||target.style.height=='0px')
target.style.display='none';
quickStylesAfter && setTargetStyles(quickStylesAfter);
if(funcQueue.length>0)
{
animateStatus = false;
var currentFuncArray=funcQueue.shift();
return currentFuncArray[0].apply(this,currentFuncArray[1]);
} animateStatus = false;
//this.slideDown();
} this.run=function(){ (t == 0) && beforeRun();
for(var styleName in styles){
target.style[styleName]=Tween.Quad.easeInOut(t,stylesBegin[styleName],stylesChange[styleName],d) + 'px';
}
t++;
if(t<=d)
return timer = setTimeout(dk.bind(this,this.run),delayTime);
this.afterRun();
if(callBackFunc)
return callBackFunc();
}
}
Motion.prototype={
animate : function(styles,callBackFunc){
if(this.getAnimateStatus())
return this.pushFuncToQueue([this.animate,arguments]);
this.resetStatus();
this.setStyles(styles)
this.setCallBackFunc(callBackFunc);
this.run();
},
slideDown:function(callBackFunc){
if(this.getAnimateStatus())
return this.pushFuncToQueue([this.slideDown,arguments]);
this.resetStatus();
var targetStyle=this.getTargetStyle();
this.setQuickStyle({height:'0px'},true);
this.setStyles({height:targetStyle.height});
this.setCallBackFunc(callBackFunc);
this.run();
},
slideUp:function(callBackFunc){
if(this.getAnimateStatus())
return this.pushFuncToQueue([this.slideUp,arguments]);
this.resetStatus();
var targetStyle=this.getTargetStyle();
this.setQuickStyle({height:targetStyle.height},false);
this.setStyles({height:'0px'});
this.setCallBackFunc(callBackFunc);
this.run();
},
show:function(callBackFunc){
this.resetStatus();
var targetStyle=this.getTargetStyle();
this.setQuickStyle({width:'0px',height:'0px'},true);
this.setStyles({width:targetStyle.width,height:targetStyle.height});
this.setCallBackFunc(callBackFunc);
this.run();
},
hide:function(callBackFunc){
this.resetStatus();
var targetStyle=this.getTargetStyle();
this.setQuickStyle({width:targetStyle.width,height:targetStyle.height},false);
this.setStyles({width:'0px',height:'0px'});
this.setCallBackFunc(callBackFunc);
this.run();
}
}
var divA;
window.onload=function(){
divA=new Motion('myDiv');
}
</script>
</head>
<body>
<div id="myDiv" style="position:absolute;left:0;background:#f00; overflow:hidden;width:300px; height:500px;display:block;">This is out test content.</div>
<div id="div2" style="position:absolute; right:0; background:#ff0;"><a href="http://www.baidu.com" target="_blank" onclick="alert('a');return false;">Hello</a></div>
<input type="button" id="btn1" value="hide" onclick="divA.animate({width:'0px'})" style="position:fixed; bottom:0; left:40%;"/>
<input type="button" id="btn2" value="show" onclick="divA.animate({width:'600px'})" style="position:fixed; bottom:0; left:50%;"/>
<input type="button" id="btn3" value="slideUp" onclick="divA.slideUp()" style="position:fixed; bottom:0; left:60%;"/>
<input type="button" id="btn4" value="slideDown" onclick="divA.slideDown()" style="position:fixed; bottom:0; left:70%;"/>
</body>
</html>

最新文章

  1. Xamarin.Android下获取与解析JSON
  2. 前端学PHP之错误处理
  3. HTML 或 CSS 文件中引用的图片文件移动到任意位置
  4. js实现图片的大小自适应效果
  5. Python语法三
  6. Windows XP SP3 VC6环境下成功编译openssl-0.9.8zh
  7. iTunes Connect突然登录不了的原因
  8. 再析在spring框架中解决多数据源的问题
  9. iOS支付后默认关注公众号
  10. cocos2dx 2.x 在ios8下clippingNode不起作用 解决办法
  11. HDU 5514 Frogs 容斥定理
  12. php不区分大小写
  13. Oracle安装及使用入门
  14. 分布式版本控制系统Git-----1.Git 初识
  15. MYSQL超时连接问题(com.mysql.jdbc.MysqlIO.readFully)
  16. Treblecross 博弈SG值
  17. 免费人脸识别APi
  18. Flagr 架构
  19. 一小时学会 C# 6.0
  20. Oracle Gateways 方式创建dblink 连接 SQLSERVER数据库

热门文章

  1. Vue-router记录
  2. 完整安装sqlserver always on集群
  3. [转]Git入门与实践(一)
  4. 基准测试-jmeter压力测试activeMQ之一环境安装配置
  5. 应运而生! 双11当天处理数据5PB—HiStore助力打造全球最大列存储数据库
  6. linux中errno使用(转)
  7. Python数据分析1------数据存取
  8. 阿里云服务上面部署redis + 本地Redis客户端连接方法
  9. 【JavaScript框架封装】使用Prototype给Array,String,Function对象的方法扩充
  10. UOJ #86 mx的组合数 (数位DP+NTT+原根优化)