JQuery 自定义CircleAnimation,Animate方法学习笔记


Posted in Javascript onJuly 10, 2011

在此贴出一些学习成果,希望能对学习JQuery的其他同学有所帮助,同时也记录下自己的学习情况。
看了一些JQuery的官方教程,已经有点心潮澎湃了,就决定自己尝试着写一些东西出来。我看到了很多很绚的动画效果,然后决定自己也尝试一下,我决定要写一个圆周运动的动画效果,下面贴出js代码

var CircleAnimation = function (center_left, center_top, id, clockwise, duration) { 
return new CircleAnimation.fn.init(center_left, center_top, id, clockwise, duration); 
}; 
CircleAnimation.fn = CircleAnimation.prototype = { 
item: {}, 
init: 
function (center_left, center_top, id, clockwise, duration) { 
this.item = $("#" + id + ""); 
if (!this.item[0]) 
return; 
currentPoint = { 
x: this.item.css("left") == "auto" ? 0 : String(this.item.css("left")).replace("px", "") - center_left, 
y: this.item.css("top") == "auto" ? 0 : String(this.item.css("top")).replace("px", "") - center_top 
}; 
center_left = center_left; 
center_top = center_top; 
if (currentPoint.x == 0 && currentPoint.y == 0) 
return; 
r = Math.pow(Math.pow(currentPoint.x, 2) + Math.pow(currentPoint.y, 2), 0.5); 
var flag = false; 
var caculateMiniAngle = function (angle) { 
//caculate the minimum angle diff, if the distance between 2 points less than 1px, we think this 2 ponits angle should be the minimum angle diff 
if (Math.sin(angle / 2) * 2 * r > 1) { 
return caculateMiniAngle(angle / 2); 
} 
else { 
return angle; 
} 
} 
miniAngle = caculateMiniAngle(Math.PI / 4); 
//store data to dom element 
this.item.data("currentPoint", currentPoint); 
this.item.data("center_left", center_left); 
this.item.data("center_top", center_top); 
this.item.data("r", r); 
this.item.data("clockwise", clockwise); 
this.item.data("miniAngle", miniAngle); 
this.item.data("duration", duration); 
//this.item.data("startX", this.startX); 
}, 
start: 
function () { 
var element; 
if (this.id) 
element = $("#" + this.id.toString()); 
else 
element = this.item; 
element.animate({ left: 1, top: 1 }, { 
duration: element.data( 
"duration"), 
step: CircleAnimation.fn.caculateNextPoint 
}); 
}, 
caculateNextPoint: 
function () { 
var el; 
el = $( 
"#" + this.id.toString()); 
var sin = el.data("currentPoint").y / el.data("r"); 
var angle = Math.asin(sin); 
if (el.data("currentPoint").x < 0) 
angle = Math.PI - angle; 
//caculate the angle diff between current point angle and next point angle 
var anglediff = el.data("miniAngle"); 
if (el.data("duration") != undefined) 
anglediff = 2 * Math.PI * 13 / el.data( 
"duration"); 
if (el.data("clockwise")) 
angle = angle - anglediff; 
else 
angle = angle + anglediff; 
var y = el.data("r") * Math.sin(angle); 
var x = el.data("r") * Math.cos(angle); 
var fx = arguments[1]; 
//set duration big enough then circle animation never stop 
fx.options.duration = ( 
new Date).getTime() - fx.startTime + 10000; 
if (fx.prop == "top") 
fx.now = y + el.data( 
"center_top"); 
if (fx.prop == "left") 
fx.now = x + el.data( 
"center_left"); 
el.data( 
"currentPoint", { x: x, y: y }); 
}, 
stop: 
function () { 
this.item.queue("fx", []); 
this.item.stop(); 
} 
}; 
CircleAnimation.fn.init.prototype = CircleAnimation.fn;
Javascript 相关文章推荐
关于hashchangebroker和statehashable的补充文档
Aug 08 Javascript
jQuery创建DOM元素实例解析
Jan 19 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
Sep 09 Javascript
探索Javascript中this的奥秘
Dec 11 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
Bootstrap3 多选和单选框(checkbox)
Dec 29 Javascript
vue2.0 axios前后端数据处理实例代码
Jun 30 Javascript
简单谈谈js的数据类型
Sep 25 Javascript
浅谈webpack4.x 入门(一篇足矣)
Sep 05 Javascript
vue中组件的过渡动画及实现代码
Nov 21 Javascript
详解Vue的ref特性的使用
Jan 24 Javascript
Vue实现导航栏菜单
Aug 19 Javascript
关于jQuery中的end()使用方法
Jul 10 #Javascript
动感效果的TAB选项卡jquery 插件
Jul 09 #Javascript
使用Jquery打造最佳用户体验的登录页面的实现代码
Jul 08 #Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
Jul 08 #Javascript
jquery 选项卡效果 新手代码
Jul 08 #Javascript
基于jquery实现图片广告轮换效果代码
Jul 07 #Javascript
jquery调用wcf并展示出数据的方法
Jul 07 #Javascript
You might like
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
php实现mysql数据库连接操作及用户管理
2015/11/08 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
用javascript连接access数据库的方法
2006/11/17 Javascript
javascript中的绑定与解绑函数应用示例
2013/06/24 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
jQuery使用deferreds串行多个ajax请求
2016/08/22 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
在vue里使用codemirror遇到的问题
2018/11/01 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
在Python中使用SimpleParse模块进行解析的教程
2015/04/11 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
python实现自动化上线脚本的示例
2019/07/01 Python
Python读取分割压缩TXT文本文件实例
2020/02/14 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
品管员岗位职责
2013/11/10 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
考博专家推荐信
2014/05/10 职场文书
法人委托书
2014/07/31 职场文书
基层党员对照检查材料
2014/09/24 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
Python语言规范之Pylint的详细用法
2021/06/24 Python