DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> jQuery入門知識 >> JQuery特效代碼 >> JQuery 自定義CircleAnimation,Animate方法學習筆記
JQuery 自定義CircleAnimation,Animate方法學習筆記
編輯:JQuery特效代碼     
在此貼出一些學習成果,希望能對學習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;
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved