html5 canvas 实现小球绕椭圆旋转
2014-09-17 14:23
525 查看
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>测试</title> <script type="text/javascript" src="jquery-1.7.1.min.js"></script> <script type="text/javascript"> var ball_count = 12;//小球的个数 var circle_x = 0;//圆心的X坐标 var circle_y = 0;//圆心的Y坐标 var circle_a = 100;//椭圆长轴 var circle_b = 10;//椭圆短轴 var now_count = 0;//当前显示小球的个数 var balls_array;//用来存储小球信息 var angle_change = 1;//角度变化 var iID; var canvas;//画布 var context;//画布环境 $(function () { var $canvas = $('#myCanvas'); canvas = $canvas[0]; canvas.addEventListener('mouseover', mouseOverCanvas, false);//鼠标移到Canvas canvas.addEventListener('mouseout', mouseOutCanvas, false);//鼠标移出Canvas canvas.addEventListener('click', clickCanvas, false);//鼠标单击Canvas context = canvas.getContext('2d'); balls_array = new Array(ball_count); circle_x = $canvas.width() / 2; circle_y = $canvas.height() / 2; loadBall(); }); //小球移动 function ballMove() { context.clearRect(0, 0, canvas.width, canvas.height);//清空画布内容 for (var i = 0; i < balls_array.length; i++) { var ball = balls_array[i]; if (ball.angle == 360) { ball.angle = 0; } ball.angle = ball.angle + angle_change;//角度 var radian = ball.angle * (Math.PI / 180);//弧度 ball.x = (circle_x + circle_a * Math.cos(radian)) - ball.w / 2; ball.y = (circle_y + circle_b * Math.sin(radian)) - ball.h / 2; var num = setProp(ball, 0.5, 1); context.globalAlpha = num; context.drawImage(ball.image, ball.x, ball.y, ball.w * num, ball.h * num); context.globalAlpha = 1; } } //加载小球 function loadBall() { for (var i = 0; i < ball_count; i++) { var angle = (i + 1) * (360 / ball_count);//角度 var radian = angle * (Math.PI / 180);//弧度 //初始化图片 var img = new Image() img.id = i + 1; img.src = 'ball.png'; //存放小球信息 var ball = {}; ball.id = img.id; ball.w = 32; ball.h = 32; ball.x = (circle_x + circle_a * Math.cos(radian)) - ball.w / 2; ball.y = (circle_y + circle_b * Math.sin(radian)) - ball.h / 2; ball.angle = angle; ball.image = img; balls_array[i] = ball; img.onload = function () { for (var j = 0; j < balls_array.length; j++) { if (this.id == balls_array[j].id) { var item = balls_array[j]; var num = setProp(item, 0.5, 1); context.globalAlpha = num;//设置图片的透明度 context.drawImage(img, item.x, item.y, item.w * num, item.h * num); context.globalAlpha = 1; break; } } now_count++; if (now_count == ball_count) {//当小球全部加载完成 iID = setInterval(ballMove, 40);//40ms移动小球 } } img.onerror = function () { alert('图片加载失败!'); } } } //鼠标单击canvas function clickCanvas(e) { p = getEventPosition(e); for (var i = 0; i < balls_array.length; i++) { var ball = balls_array[i]; if (p.x >= ball.x && p.x <= (ball.x + ball.w) && p.y >= ball.y && p.y <= (ball.y + ball.h)) { alert(ball.id); //window.location.href = 'http://www.baidu.com?id=' + ball.id; break; } } } //鼠标移到Canvas,小球停止移动 function mouseOverCanvas() { clearInterval(iID); } //鼠标移出Canvas,小球移动 function mouseOutCanvas() { iID = setInterval(ballMove, 40); } //获取事件对象发生的位置 function getEventPosition(ev) { var x, y; if (ev.layerX || ev.layerX == 0) { x = ev.layerX; y = ev.layerY; } else if (ev.offsetX || ev.offsetX == 0) { // Opera x = ev.offsetX; y = ev.offsetY; } return { x: x, y: y }; } //把Y坐标转化为透明度和尺寸属性,范围在n1到n2之间; function setProp(ball, n1, n2) { return (((ball.y + ball.h / 2 - circle_y) + 2 * circle_b) / circle_b - 1) / 2 * (n2 - n1) + n1; } </script> </head> <body> <canvas id="myCanvas" width="300" height="300"> 这个浏览器不支持HTML5元素。 </canvas> </body> </html>
相关文章推荐
- html5 canvas实现小球绕圆旋转
- 第十讲:html5中canvas实现正方体的动态旋转
- 基于HTML5 Canvas实现工控2D叶轮旋转
- 第八讲:HTML5中canvas实现小球击打小方块游戏
- 基于HTML5 Canvas实现工控2D叶轮旋转
- html5使用canvas实现小球碰撞反弹实例
- HTML5 Canvas 绘制椭圆与椭圆弧的实现
- HTML5 Canvas 图像动画的实现(实例小球弹跳)
- 基于HTML5 Canvas实现工控2D叶轮旋转
- 基于HTML5 Canvas 实现矢量工控风机叶轮旋转
- 【JavaScript】实现三个小球围着椭圆旋转的加载动画
- 基于HTML5 Canvas 实现矢量工控风机叶轮旋转
- 详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
- 第八讲:HTML5中canvas实现小球击打小方块游戏
- Javascript与HTML5的canvas实现图片旋转效果
- 基于HTML5 Canvas 实现矢量工控风机叶轮旋转
- HTML5 组件Canvas实现图像灰度化
- HTML5 Canvas 旋转
- 基于Html5的Canvas实现的Clocks (钟表)
- [置顶] HTML5 实现小车动画效果(Canvas/CSS3/JQuery)