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的IE和Firefox兼容性集锦
Dec 11 Javascript
网页开发中的容易忽略的问题 javascript HTML中的table
Apr 15 Javascript
javascript实现简单的进度条
Jul 02 Javascript
JavaScript中的Function函数
Aug 27 Javascript
自动完成的搜索框javascript实现
Feb 26 Javascript
AngularJs定制样式插入到ueditor中的问题小结
Aug 01 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
Vue2 Vue-cli中使用Typescript的配置详解
Jul 24 Javascript
详解使用路由延迟加载 Angular 模块
Oct 12 Javascript
面包屑导航详解
Dec 07 Javascript
微信小程序实现发送验证码按钮效果
Dec 20 Javascript
微信小程序wepy框架学习和使用心得详解
May 24 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
dedecms模板标签代码官方参考
2007/03/17 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
php遍历目录方法小结
2015/03/10 PHP
php类常量用法实例分析
2015/07/09 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
PHP 加密 Password Hashing API基础知识点
2020/03/02 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
XENON基于JSON变种
2010/07/27 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
javascript仿京东导航左侧分类导航下拉菜单效果
2020/11/25 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
bootstrap模态框关闭后清除模态框的数据方法
2018/08/10 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
Python中使用Flask、MongoDB搭建简易图片服务器
2015/02/04 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python 制作糗事百科爬虫实例
2016/09/22 Python
python实现远程控制电脑
2019/05/23 Python
python全栈知识点总结
2019/07/01 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
解决TensorFlow训练模型及保存数量限制的问题
2021/03/03 Python
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
大学生校园创业计划书
2014/02/08 职场文书
高级销售求职信
2014/02/21 职场文书
2015年体育部工作总结
2015/04/02 职场文书
学校社团活动总结
2015/05/07 职场文书
区域销售大会开幕词
2016/03/04 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
Python中的程序流程控制语句
2022/02/24 Python