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 相关文章推荐
Jquery实现鼠标移上弹出提示框、移出消失思路及代码
May 19 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
Jan 02 Javascript
利用js制作html table分页示例(js实现分页)
Apr 25 Javascript
javascript中解析四则运算表达式的算法和示例
Aug 11 Javascript
JavaScript的类型、值和变量小结
Jul 09 Javascript
jquery+css3实现会动的小圆圈效果
Jan 27 Javascript
Js获取图片原始宽高的实现代码
May 17 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
May 18 Javascript
JavaScript实现各种排序的代码详解
Aug 28 Javascript
微信小程序之页面跳转和参数传递的实现
Sep 29 Javascript
JS实现的JSON数组去重算法示例
Apr 11 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
Apr 22 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/07/01 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
2015/06/25 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
JavaScript函数中的this四种绑定形式
2017/08/15 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
[54:15]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第二场2月1日
2021/03/11 DOTA
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
python3.x 将byte转成字符串的方法
2018/07/17 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
pycharm创建一个python包方法图解
2019/04/10 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
为什么python比较流行
2020/06/19 Python
Python 实现一个计时器
2020/07/28 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
中国梦的演讲稿
2014/01/08 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
全国文明单位申报材料
2014/05/31 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
oracle表分区的概念及操作
2021/04/24 Oracle
Django操作cookie的实现
2021/05/26 Python