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做一个小游戏平台 (一)
Dec 29 Javascript
javascript测试题练习代码
Oct 10 Javascript
jquery遍历数组与筛选数组的方法
Nov 05 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
JS delegate与live浅析
Dec 21 Javascript
angularjs学习笔记之双向数据绑定
Sep 26 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
May 16 Javascript
Vue Element UI + OSS实现上传文件功能
Jul 31 Javascript
关于layui表单中按钮自动提交的解决方法
Sep 09 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
Oct 31 Javascript
利用javaScript处理常用事件详解
Apr 14 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中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
php判断文件上传类型及过滤不安全数据的方法
2014/12/17 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
2016/05/23 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
学习python处理python编码问题
2011/03/13 Python
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
深入解析Python中的list列表及其切片和迭代操作
2016/03/13 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
python 自动批量打开网页的示例
2019/02/21 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python3.6 tkinter实现屏保小程序
2019/07/30 Python
python3实现mysql导出excel的方法
2019/07/31 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
基于python实现从尾到头打印链表
2019/11/02 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
Python如何安装第三方模块
2020/05/28 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
某公司.Net方向面试题
2014/04/24 面试题
2014年党务公开实施方案
2014/02/27 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
基于Python实现射击小游戏的制作
2022/04/06 Python