日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动画原理——用户交互:移动物体

發布時間:2025/3/15 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动画原理——用户交互:移动物体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

書籍名稱:HTML5-Animation-with-JavaScript

書籍源碼:https://github.com/lamberta/html5-animation1

1.物體內外的事件

判斷物體內外的條件是判斷鼠標位置和物體中心的位置。

01-mouse-events.html

<!doctype html> <html><head><meta charset="utf-8"><title>Mouse Events</title><link rel="stylesheet" href="../include/style.css"></head><body><header>Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a></header><canvas id="canvas" width="400" height="400"></canvas><textarea id="log"></textarea><aside>Move and press mouse inside and outside of circle.</aside><script src="../include/utils.js"></script><script src="./classes/ball.js"></script><script>window.onload = function () {var canvas = document.getElementById('canvas'),context = canvas.getContext('2d'),mouse = utils.captureMouse(canvas),log = document.getElementById('log'),ball = new Ball();ball.x = canvas.width / 2;ball.y = canvas.height / 2;ball.draw(context);canvas.addEventListener('mousedown', function () {if (utils.containsPoint(ball.getBounds(), mouse.x, mouse.y)) {log.value = "in ball: mousedown";} else {log.value = "canvas: mousedown";}}, false);canvas.addEventListener('mousemove', function () {if (utils.containsPoint(ball.getBounds(), mouse.x, mouse.y)) {log.value = "in ball: mousemove";} else {log.value = "canvas: mousemove";}}, false);canvas.addEventListener('mouseup', function () {if (utils.containsPoint(ball.getBounds(), mouse.x, mouse.y)) {log.value = "in ball: mouseup";} else {log.value = "canvas: mouseup";}}, false);};</script></body> </html> View Code

手機事件

02-touch-events.html

<!doctype html> <html><head><meta charset="utf-8"><title>Touch Events</title><meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"><link rel="stylesheet" href="../include/style.css"></head><body><header>Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a></header><canvas id="canvas" width="400" height="400"></canvas><textarea id="log"></textarea><aside>Press and move touch inside and outside of circle (touch-capable device required).</aside><script src="../include/utils.js"></script><script src="./classes/ball.js"></script><script>window.onload = function () {var canvas = document.getElementById('canvas'),context = canvas.getContext('2d'),touch = utils.captureTouch(canvas),log = document.getElementById('log'),ball = new Ball();ball.x = canvas.width / 2;ball.y = canvas.height / 2;ball.draw(context);canvas.addEventListener('touchstart', function (event) {event.preventDefault();if (utils.containsPoint(ball.getBounds(), touch.x, touch.y)) {log.value = "in ball: touchstart";} else {log.value = "canvas: touchstart";}}, false);canvas.addEventListener('touchend', function (event) {event.preventDefault();log.value = "canvas: touchend";}, false);canvas.addEventListener('touchmove', function (event) {event.preventDefault();if (utils.containsPoint(ball.getBounds(), touch.x, touch.y)) {log.value = "in ball: touchmove";} else {log.value = "canvas: touchmove";}}, false);};</script></body> </html> View Code

2.拖動

將鼠標的位置設置給物體的位置

03-mouse-move-drag.html

View Code

3.將拖動交互和運動效果合并

04-drag-and-move-1.html

<!doctype html> <html><head><meta charset="utf-8"><title>Drag and Move 1</title><link rel="stylesheet" href="../include/style.css"></head><body><header>Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a></header><canvas id="canvas" width="400" height="400"></canvas><aside>Press and drag circle with mouse.</aside><script src="../include/utils.js"></script><script src="./classes/ball.js"></script><script>window.onload = function () {var canvas = document.getElementById('canvas'),context = canvas.getContext('2d'),mouse = utils.captureMouse(canvas),ball = new Ball(),vx = Math.random() * 10 - 5,vy = -10,bounce = -0.7,gravity = 0.2,isMouseDown = false;ball.x = canvas.width / 2;ball.y = canvas.height / 2;canvas.addEventListener('mousedown', function () {if (utils.containsPoint(ball.getBounds(), mouse.x, mouse.y)) {isMouseDown = true;canvas.addEventListener('mouseup', onMouseUp, false);canvas.addEventListener('mousemove', onMouseMove, false);}}, false);function onMouseUp () {isMouseDown = false;canvas.removeEventListener('mouseup', onMouseUp, false);canvas.removeEventListener('mousemove', onMouseMove, false);}function onMouseMove (event) {ball.x = mouse.x;ball.y = mouse.y;}function checkBoundaries () {var left = 0,right = canvas.width,top = 0,bottom = canvas.height;vy += gravity;ball.x += vx;ball.y += vy;//boundary detect and bounceif (ball.x + ball.radius > right) {ball.x = right - ball.radius;vx *= bounce;} else if (ball.x - ball.radius < left) {ball.x = left + ball.radius;vx *= bounce;}if (ball.y + ball.radius > bottom) {ball.y = bottom - ball.radius;vy *= bounce;} else if (ball.y - ball.radius < top) {ball.y = top + ball.radius;vy *= bounce;}}(function drawFrame () {window.requestAnimationFrame(drawFrame, canvas);context.clearRect(0, 0, canvas.width, canvas.height);if (!isMouseDown) {checkBoundaries();}ball.draw(context);}());};</script></body> </html> View Code

05-drag-and-move-2.html

解決每次拖動速度不清零的問題

<!doctype html> <html><head><meta charset="utf-8"><title>Drag and Move 2</title><link rel="stylesheet" href="../include/style.css"></head><body><header>Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a></header><canvas id="canvas" width="400" height="400"></canvas><aside>Press and drag circle with mouse.</aside><script src="../include/utils.js"></script><script src="./classes/ball.js"></script><script>window.onload = function () {var canvas = document.getElementById('canvas'),context = canvas.getContext('2d'),mouse = utils.captureMouse(canvas),ball = new Ball(),vx = Math.random() * 10 - 5,vy = -10,bounce = -0.7,gravity = 0.2,isMouseDown = false;ball.x = canvas.width / 2;ball.y = canvas.height / 2;canvas.addEventListener('mousedown', function () {if (utils.containsPoint(ball.getBounds(), mouse.x, mouse.y)) {isMouseDown = true;vx = vy = 0;canvas.addEventListener('mouseup', onMouseUp, false);canvas.addEventListener('mousemove', onMouseMove, false);}}, false);function onMouseUp () {isMouseDown = false;canvas.removeEventListener('mouseup', onMouseUp, false);canvas.removeEventListener('mousemove', onMouseMove, false);}function onMouseMove (event) {ball.x = mouse.x;ball.y = mouse.y;}function checkBoundaries () {var left = 0,right = canvas.width,top = 0,bottom = canvas.height;vy += gravity;ball.x += vx;ball.y += vy;//boundary detect and bounceif (ball.x + ball.radius > right) {ball.x = right - ball.radius;vx *= bounce;} else if (ball.x - ball.radius < left) {ball.x = left + ball.radius;vx *= bounce;}if (ball.y + ball.radius > bottom) {ball.y = bottom - ball.radius;vy *= bounce;} else if (ball.y - ball.radius < top) {ball.y = top + ball.radius;vy *= bounce;}}(function drawFrame () {window.requestAnimationFrame(drawFrame, canvas);context.clearRect(0, 0, canvas.width, canvas.height);if (!isMouseDown) {checkBoundaries();}ball.draw(context);}());};</script></body> </html> View Code

4.拋

存儲物體的位置,兩幀中兩個物體的位移即為物體的初始速度。

<!doctype html> <html><head><meta charset="utf-8"><title>Throwing</title><link rel="stylesheet" href="../include/style.css"></head><body><header>Example from <a href="http://amzn.com/1430236655?tag=html5anim-20"><em>Foundation HTML5 Animation with JavaScript</em></a></header><canvas id="canvas" width="400" height="400"></canvas><aside>Press, drag, and throw circle with mouse.</aside><script src="../include/utils.js"></script><script src="./classes/ball.js"></script><script>window.onload = function () {var canvas = document.getElementById('canvas'),context = canvas.getContext('2d'),mouse = utils.captureMouse(canvas),ball = new Ball(),vx = Math.random() * 10 - 5,vy = -10,bounce = -0.7,gravity = 0.2,isMouseDown = false,oldX, oldY;ball.x = canvas.width / 2;ball.y = canvas.height / 2;canvas.addEventListener('mousedown', function () {if (utils.containsPoint(ball.getBounds(), mouse.x, mouse.y)) {isMouseDown = true;oldX = ball.x;oldY = ball.y;canvas.addEventListener('mouseup', onMouseUp, false);canvas.addEventListener('mousemove', onMouseMove, false);}}, false);function onMouseUp () {isMouseDown = false;canvas.removeEventListener('mouseup', onMouseUp, false);canvas.removeEventListener('mousemove', onMouseMove, false);}function onMouseMove (event) {ball.x = mouse.x;ball.y = mouse.y;}function trackVelocity () {vx = ball.x - oldX;vy = ball.y - oldY;oldX = ball.x;oldY = ball.y;}function checkBoundaries () {var left = 0,right = canvas.width,top = 0,bottom = canvas.height;vy += gravity;ball.x += vx;ball.y += vy;//boundary detect and bounceif (ball.x + ball.radius > right) {ball.x = right - ball.radius;vx *= bounce;} else if (ball.x - ball.radius < left) {ball.x = left + ball.radius;vx *= bounce;}if (ball.y + ball.radius > bottom) {ball.y = bottom - ball.radius;vy *= bounce;} else if (ball.y - ball.radius < top) {ball.y = top + ball.radius;vy *= bounce;}}(function drawFrame () {window.requestAnimationFrame(drawFrame, canvas);context.clearRect(0, 0, canvas.width, canvas.height);if (isMouseDown) {trackVelocity();} else {checkBoundaries();}ball.draw(context);}());};</script></body> </html> View Code

?

06-throwing.html

轉載于:https://www.cnblogs.com/winderby/p/4259596.html

總結

以上是生活随笔為你收集整理的动画原理——用户交互:移动物体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。