日期:2014-05-16 浏览次数:20443 次
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title> - jsFiddle demo by zswang</title>
<script type='text/javascript' src='/js/lib/mootools-core-1.4.3-compat.js'></script>
<link rel="stylesheet" type="text/css" href="/css/normalize.css">
<link rel="stylesheet" type="text/css" href="/css/result-light.css">
<style type='text/css'>
#box1{
position: absolute;
width: 10px;
height: 10px;
background: red;
}
</style>
<script type='text/javascript'>//<![CDATA[
window.addEvent('load', function() {
var AceGeometric = /^u/.test(typeof exports) ? AceGeometric || {} : exports;
void function(exports){
/**
* Ace Engine Geometric
* 几何函数
* @see http://code.google.com/p/ace-engine/wiki/AceGeometric
* @author 王集鹄(wangjihu,http://weibo.com/zswang)
* @version 1.0
* @copyright www.baidu.com
*/
var
math = Math, cos = math.cos, sin = math.sin, PI = math.PI, PI2 = PI * 2, min = math.min, max = math.max,
atan = math.atan, sqrt = math.sqrt, pow = math.pow;
/**
* 计算点到点之间的距离
* @param {Array[Number,Number]} a 坐标1
* @param {Array[Number,Number]} b 坐标2
*/
function pointToPoint(a, b){
return sqrt(pow(a[0] - b[0], 2) + pow(a[1] - b[1], 2));
}
/**
* 计算点的角度
* @param {Array} origin 圆心坐标
* @param {Array} point 点坐标
* @param {Number} eccentricity 离心率
*/
function pointToAngle(origin, point, eccentricity){
if (/^u/.test(typeof eccentricity)) eccentricity = 1;
if (point[0] == origin[0]) {
if (point[1] > origin[1])
return PI * 0.5;
return PI * 1.5
} else if (point[1] == origin[1]) {
if (point[0] > origin[0])
return 0;
return PI;
}
var t = atan((origin[1] - point[1]) / (origin[0] - point[0]) * eccentricity);
if (point[0] > origin[0] && point[1] < origin[1])
return t + 2 * PI;
if (point[0] > origin[0] && point[1] > origin[1])
return t;
return t + PI;
}
exports.pointToAngle = pointToAngle;
exports.pointToPoint= pointToPoint;
}(AceGeometric);
//==DEMO==
void function(){
var box1 = document.getElementById('box1'), currPoint = [0, 0], timer, speed = 5;
document.onmousedown = function(e){
e = e || event;
timer && clearInterval(timer); // 清楚计时器
newPoint = [e.clientX, e.clientY];
timer = setInterval(function(){
var len = AceGeometric.pointToPoint(currPoint, newPoint);
if (len < 1){ // 两点间距离足够小
clearInterval(timer);
timer = 0;
} else {
var angle = AceGeometric.pointToAngle(currPoint, newPoint);
currPoint = [currPoint[0] + Math.cos(angle) * Math.min(len / 2, speed), currPoint[1] + Math.sin(angle) * Math.min(len / 2, speed)];
box1.style.left = currPoint[0] + 'px';
box1.style.top = currPoint[1] + 'px';
}
}, 50);
}
}();
});//]]>
</script>
</head>
<body>
<div id="box1"></div>
</body>
</html>
------解决方案--------------------
<html>
<body>
<div id="test" style="width:100px;height:100px;position:absolute;border:1px solid red;">
</div>