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 相关文章推荐
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
jQuery实现锚点scoll效果实例分析
Mar 10 Javascript
JavaScript实现简单的二级导航菜单实例
Apr 15 Javascript
JS实现方向键切换输入框焦点的方法
Aug 19 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
Dec 08 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
Jun 24 Javascript
基于jQuery实现文字打印动态效果
Apr 21 jQuery
Angular.JS通过指令操作DOM的方法
May 10 Javascript
微信小程序实现跑马灯效果
Oct 21 Javascript
vue-router源码之history类的浅析
May 21 Javascript
JS实现网站楼层导航效果代码实例
Jun 16 Javascript
微信小程序换肤功能实现代码(思路详解)
Aug 25 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.MVC的模板标签系统(三)
2006/09/05 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
PHP递归的三种常用方式
2019/02/28 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
JavaScript中定时控制Throttle、Debounce和Immediate详解
2016/11/17 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
sqlalchemy对象转dict的示例
2014/04/22 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
广播节目策划方案
2014/05/23 职场文书
教师职位说明书
2014/07/29 职场文书
重阳节简报
2015/07/20 职场文书
2016年母亲节寄语
2015/12/04 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers
Go标准容器之Ring的使用说明
2021/05/05 Golang
python数字图像处理:图像简单滤波
2022/06/28 Python