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的loading效果实现代码
Nov 05 Javascript
Juqery Html(),append()等方法的Bug解决方法
Dec 13 Javascript
js特殊字符过滤的示例代码
Mar 05 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
May 06 Javascript
浅谈Javascript的静态属性和原型属性
May 07 Javascript
JS中的进制转换以及作用
Jun 26 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
详解Vue-基本标签和自定义控件
Mar 24 Javascript
详解vue2 $watch要注意的问题
Sep 08 Javascript
在vue中v-bind使用三目运算符绑定class的实例
Sep 29 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
Nov 08 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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
PHP网站备份程序代码分享
2011/06/10 PHP
需要注意的几个PHP漏洞小结
2012/02/05 PHP
php实现评论回复删除功能
2017/05/23 PHP
PHP函数积累总结
2019/03/19 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
JS IE和FF兼容性问题汇总
2009/02/09 Javascript
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
JavaScript格式化数字的函数代码
2010/11/30 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
javascript动态设置样式style实例分析
2015/05/13 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
Vue实现简单分页器
2018/12/29 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
python MysqlDb模块安装及其使用详解
2018/02/23 Python
python3实现163邮箱SMTP发送邮件
2018/05/22 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
2014村务公开实施方案
2014/02/25 职场文书
商铺门前三包责任书
2014/07/25 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
推普周活动总结
2014/08/28 职场文书
学生逃课检讨书
2015/02/17 职场文书
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS