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拖拽的效果类和dom-drag.js浅析
Jul 17 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
Mar 08 Javascript
深入理解JavaScript中的箭头函数
Jul 28 Javascript
JS日期加减,日期运算代码
Nov 05 Javascript
JS封装的选项卡TAB切换效果示例
Sep 20 Javascript
Javascript this 函数深入详解
Dec 13 Javascript
微信小程序 支付功能(前端)的实现
May 24 Javascript
详解vue渲染从后台获取的json数据
Jul 06 Javascript
你可能不知道的前端算法之文字避让(inMap)
Jan 12 Javascript
VUE 实现滚动监听 导航栏置顶的方法
Sep 11 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
Dec 29 jQuery
vue路由实现登录拦截
Mar 24 Vue.js
关于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 编写的日历
2006/10/09 PHP
php算法实例分享
2015/07/14 PHP
javascript 触发事件列表 比较不错
2009/09/03 Javascript
Array.prototype.slice.apply的使用方法
2010/03/17 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
JavaScript框架是什么?怎样才能叫做框架?
2015/07/01 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
详解Node项目部署到云服务器上
2017/07/12 Javascript
微信小程序 获取session_key和openid的实例
2017/08/17 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
vue项目首屏加载时间优化实战
2019/04/23 Javascript
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
Python中的自定义函数学习笔记
2014/09/23 Python
Python实现网站注册验证码生成类
2017/06/08 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
pytorch随机采样操作SubsetRandomSampler()
2020/07/07 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
HTML5 placeholder(空白提示)属性介绍
2013/08/07 HTML / CSS
幼儿教师自我鉴定
2013/11/02 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
出生公证书
2015/01/23 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python
Python jiaba库的使用详解
2021/11/23 Python