效果图
源码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html style="height: 100%;"> <body style="height: 100%;"> </body> <script type="text/javascript"> // ============================================================================= // Util. // var Util = { getBody: function() { return document.body; }, appendToBody: function(tag) { this.getBody().appendChild(tag); }, createShape: function(x, y, width, height) { var div = document.createElement("div"); div.style.position = "absolute"; div.style.border = "solid"; div.style.background= "rgb(180, 230, 29)"; //div.style.color = "rgb(180, 230, 29)"; div.style.left = x + "px"; div.style.top = y + "px"; div.style.width = width + "px"; div.style.height = height + "px"; //div.style.webkitTransform = "rotate(70deg)"; return div; }, equal: function(v1, v2) { return Math.abs(v1 - v2) < 0.0001; }, parseAngle: function(angle) { return "rotate(_angledeg)".replace("_angle", angle); }, parseRect: function(x, y, width, height) { var result = "rect(_ypx, _endxpx, _endypx, _xpx)"; result = result.replace("_x", x).replace("_y", y); result = result.replace("_endx", x + width).replace("_endy", y + height); return result; }, getTagPoint: function(tag) { return { "x": parseInt(tag.style.left.replace("px", "")), "y": parseInt(tag.style.top.replace("px", "")) }; }, setTagPoint: function(tag, point) { tag.style.left = point.x + "px"; tag.style.top = point.y + "px"; } }; // // ============================================================================= // // 获取鼠标坐标. // var cursor = { "x": 0, "y": 0, "setPosition": function(e) { this.x = e.clientX; this.y = e.clientY; } }; // 绑定全局, 获取鼠标坐标. ( function() { Util.getBody().onmousemove = cursor.setPosition; } )(); // // ============================================================================= // ============================================================================= // 元素信息. // function ElementInfo(tag) { var self = this; tag.onmousemove = function() { self.step1 = 10; self.step2 = 5; }; this.angle = 0; this.step1 = 0; // 旋转. this.step2 = 0; // 移动. this.tag = tag; Util.appendToBody(tag); } // 执行旋转. ElementInfo.prototype.onRotate = function() { if ( !Util.equal(this.step1, 0) ) { this.angle += this.step1; this.angle = parseInt(this.angle); this.angle = parseInt(this.angle % 360); this.step1 -= 0.05; this.tag.style.webkitTransform = Util.parseAngle(this.angle); } } // 执行移动. ElementInfo.prototype.onMove = function() { if ( !Util.equal(this.step2, 0) ) { var tagPoint = Util.getTagPoint(this.tag); var toX = this.step2 * Math.sin(3.14 / 180 * this.angle) + tagPoint.x; var toY = this.step2 * Math.cos(3.14 / 180 * this.angle) + tagPoint.y; Util.setTagPoint(this.tag, {"x": toX, "y": toY}); this.step2 -= 0.05; } } // // ============================================================================= var elements = []; ( function() { var screenWidth = document.documentElement.clientWidth; var screenHeight = document.documentElement.clientHeight; var cellWidth = 50; var cellHeight = 50; var cellNumX = 16; var cellNumY = 6; var viewWidth = cellNumX * cellWidth; var viewHeight = cellNumY * cellHeight; var viewX = parseInt( (screenWidth - viewWidth) / 2); var viewY = parseInt( (screenHeight - viewHeight) / 2); for (var i = 0; i != cellNumX * cellNumY; ++i) { var x = viewX + parseInt(i % cellNumX) * cellWidth; var y = viewY + parseInt(i / cellNumX) * cellHeight; var tag = Util.createShape(x, y, cellWidth, cellHeight); var ele = new ElementInfo(tag); elements.push(ele); } setInterval(handleLogic, 10); } )(); function handleLogic() { for (var i in elements) { elements[i].onRotate(); elements[i].onMove(); } } </script> </html>
鼠标经过时, 方块会旋转并且移动.