JQuery自定义CircleAnimation,Animate方法学习笔记_jquery
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JQuery自定义CircleAnimation,Animate方法学习笔记_jquery,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3011字,纯文字阅读大概需要5分钟。
内容图文
![JQuery自定义CircleAnimation,Animate方法学习笔记_jquery](/upload/InfoBanner/zyjiaocheng/314/212a747e5d8c43c28f3fb0d5b7e207d2.jpg)
看了一些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;
内容总结
以上是互联网集市为您收集整理的JQuery自定义CircleAnimation,Animate方法学习笔记_jquery全部内容,希望文章能够帮你解决JQuery自定义CircleAnimation,Animate方法学习笔记_jquery所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。