这篇文章的效果,需要看过以下3篇文章:

[js插件开发教程]一步步开发一个可以定制配置的隔行变色小插件

[js高手之路]匀速运动与实例实战(侧边栏,淡入淡出)

[js高手之路]打造通用的匀速运动框架

 <!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>通用的面向对象匀速运动框架 - by ghostwu</title>
<style>
div {
width: 200px;
height: 200px;
background: red;
margin:20px;
}
</style>
<script>
( function(){
function css( obj, name ){
if ( obj.currentStyle ) {
return obj.currentStyle[name];
}else {
return getComputedStyle( obj, false )[name];
}
}
var ghostwu = {};
ghostwu.linear = {
A : function( option ){
return new ghostwu.linear.init( option );
}
};
ghostwu.linear.init = function( option ){
this.opt = {
'selector' : '',
'css-name' : {},
'speed' : 10,
'cb' : undefined
}
for( var key in option ){
this.opt[key] = option[key];
}
this.ele = document.querySelector( this.opt['selector'] );
this.bindEvent();
}
ghostwu.linear.init.prototype.bindEvent = function() {
var _this = this;
this.ele.onmouseover = function(){
_this.animate( this );
};
this.ele.onmouseout = function(){
_this.animate( this );
}
}
ghostwu.linear.init.prototype.animate = function(){
var cur = 0, _this = this;
clearInterval(_this['ele'].timer);
_this['ele'].timer = setInterval(function () {
var bFlag = true;
for (var key in _this.opt['css-name']) {
if (key == 'opacity') {
cur = css(_this.ele, 'opacity') * 100;
} else {
cur = parseInt(css(_this.ele, key));
}
var target = _this.opt['css-name'][key];
if (cur != target) {
bFlag = false;
if (key == 'opacity') {
_this['ele'].style.opacity = ( cur + _this.opt['speed'] ) / 100;
_this['ele'].style.filter = "alpha(opacity:" + (cur + _this.opt['speed']) + ")";
} else {
_this['ele'].style[key] = cur + _this.opt['speed'] + "px";
}
}
} if (bFlag) {
clearInterval(_this['ele'].timer);
_this.opt['cb'] && _this.opt['cb'].call( _this['ele'] );
}
}, 1000 / 16 );
}
window.g = ghostwu;
} )();
window.onload = function() {
g.linear.A({
'selector' : '#box',
'css-name' : {
'width' : 300,
'height' : 400
}
});
g.linear.A({
'selector' : '#box2',
'css-name' : {
'width' : 300,
'height' : 400
}
});
}
</script>
</head>
<body>
<div id="box"></div>
<div id="box2"></div>
</body>
</html>

鼠标移动到div查看效果:

 
 

[js高手之路]面向对象版本匀速运动框架的更多相关文章

  1. [js高手之路]面向对象+设计模式+继承一步步改造简单的四则运算

    到目前为止,我已经写完了面向对象完整的一个系列知识,前面基本属于理论,原理的理解,接下来,我们就用学到的知识来实战下吧. 看看理解原理和理论是否重要?例子从简单到复杂 一.单体(字面量)封装加减乘除 ...

  2. [js高手之路] javascript面向对象写法与应用

    一.什么是对象? 对象是n个属性和方法组成的集合,如js内置的document, Date, Regexp, Math等等 document就是有很多的属性和方法, 如:getElementById, ...

  3. [js高手之路]打造通用的匀速运动框架

    本文,是接着上文[js高手之路]匀速运动与实例实战(侧边栏,淡入淡出)继续的,在这篇文章的最后,我们做了2个小实例:侧边栏与改变透明度的淡入淡出效果,本文我们把上文的animate函数,继续改造,让变 ...

  4. [js高手之路]封装运动框架实战左右与上下滑动的焦点轮播图

    在这篇文章[js高手之路]打造通用的匀速运动框架中,封装了一个匀速运动框架,我们在这个框架的基础之上,加上缓冲运动效果,然后用运动框架来做幻灯片(上下,左右),效果如下: 1 2 3 4 5 // 0 ...

  5. [js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标

    有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下: [js高手之路] html5 canvas系列教程 ...

  6. [js高手之路]设计模式系列课程-发布者,订阅者重构购物车

    发布者订阅者模式,是一种很常见的模式,比如: 一.买卖房子 生活中的买房,卖房,中介就构成了一个发布订阅者模式,买房的人,一般需要的是房源,价格,使用面积等信息,他充当了订阅者的角色 中介拿到卖主的房 ...

  7. [js高手之路]Node.js实现简易的爬虫-抓取博客文章列表信息

    抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的http库 ...

  8. [js高手之路]html5 canvas动画教程 - 边界判断与小球粒子模拟喷泉,散弹效果

    备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 本文,我们要做点有意思的效果,首先,来一个简单 ...

  9. [js高手之路]html5 canvas动画教程 - 边界判断与反弹

    备注:本文后面的代码,如果加载了ball.js,那么请使用这篇文章[js高手之路] html5 canvas动画教程 - 匀速运动的ball.js代码. 边界反弹: 当小球碰到canvas的四个方向的 ...

随机推荐

  1. JS的隐式转换 从 [] ==false 说起

    前言 最近和大创扯淡时说到了[] == false,从结果上来看我俩都答错了,从气势上来说我俩的歪理都能出书了(恩,程序猿的骄傲),但是这其实背后隐藏了一潭很深的水,对,很深... 隐式类型转换 JS ...

  2. python 中Dict 转 Json

    近期在公司须要写个小工具.运用到的python,然后须要将Dict转成Json. 之前遇到转换Json失败,然后以为复杂的Entity结构.不能用Json的库Json.dump().进行转换. 自己些 ...

  3. 让Android Support V4中的SwipeRefreshLayout支持上拉载入很多其它

    前言 原来的Android SDK中并没有下拉刷新组件,可是这个组件确实绝大多数APP必备的一个部件.好在google在v4包中出了一个SwipeRefreshLayout.可是这个组件仅仅支持下拉刷 ...

  4. Codeforces Round #261 (Div. 2)459D. Pashmak and Parmida&#39;s problem(求逆序数对)

    题目链接:http://codeforces.com/contest/459/problem/D D. Pashmak and Parmida's problem time limit per tes ...

  5. 趋势科技PC-cillin2015,你来公測我发奖!

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXF1c2hp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  6. 开源Android-PullToRefresh下拉刷新源代码分析

    PullToRefresh 这个库用的是很至多.github  今天主要分析一下源代码实现. 我们通过ListView的下拉刷新进行分析.其他的类似. 整个下拉刷新  父View是LinearLayo ...

  7. Java二维数组的概念和使用方法

    二维数组 数组的数组---二维数组的每一个元素是一个一维数组 定义格式 数据类型[][] 数组名 = new 数据类型[二维数组的长度/包含的一维数组的个数][每个一维数组的长度]; int[][] ...

  8. Java filter中的chain

    一.Filter Filter:用来拦截请求,处于客户端和被请求资源之间,是为了代码的复用性.Filter链,在web.xml中哪个先配置就先调用哪个 二.FilterChain(过滤链) 服务器会按 ...

  9. Django的Form(二)

    上一篇已经简单介绍了Django的Form,现在开始进阶操作了 ..... 创建Form类的时候,主要涉及到Form字段和Form的插件,字段用于做form验证,插件用来生成HTML DjiangoF ...

  10. redis的sort命令

    1.简单描述 sort命令可以对list.set和sorted set的元素进行排序,然后显示排序的结果,不影响这些类型里面存储的数据的排序.就是说sort可以对list的元素排序,但是执行lrang ...