当前位置: 首页 > wzjs >正文

做网站公司是干什么的网站名查询网址

做网站公司是干什么的,网站名查询网址,在什么网站可以做推广,网站估值怎么做Canvas进阶篇:鼠标交互动画 前言获取鼠标坐标鼠标事件点击事件监听代码示例效果预览 拖动事件监听代码示例效果预览 结语 前言 在上一篇文章Canvas进阶篇:基本动画详解 中,我们讲述了在Canvas中实现动画的基本步骤和动画的绘制方法。本文将进…

Canvas进阶篇:鼠标交互动画

  • 前言
  • 获取鼠标坐标
  • 鼠标事件
    • 点击事件监听
      • 代码示例
      • 效果预览
    • 拖动事件监听
      • 代码示例
      • 效果预览
  • 结语

前言

在上一篇文章Canvas进阶篇:基本动画详解 中,我们讲述了在Canvas中实现动画的基本步骤和动画的绘制方法。本文将进一步讲述如何通过鼠标事件增加动画和用户的交互,包括捕获鼠标的点击和拖动事件,获取鼠标在 Canvas 中坐标等。

获取鼠标坐标

在进行鼠标交互时,最主要的是要获取鼠标在Canvas中画布中的坐标。通常我们获取到的鼠标坐标都是相对于浏览器窗口的;如果想要获取相对于 Canvas 画布的坐标,就需要进行坐标转换,可以通过以下方式实现:

function getCanvasCoordinates(event) {const rect = canvas.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;return { x, y };
}

上述代码中,canvas.getBoundingClientRect()方法返回 Canvas 在浏览器窗口中的位置和尺寸信息,通过用鼠标相对于窗口的坐标减去 Canvas 左上角相对于窗口的坐标,就得到了鼠标在 Canvas 中的坐标。

鼠标事件

鼠标事件一共分为4类:鼠标点击事件click、鼠标按下事件mousedown、鼠标移动事件mousemove和鼠标松开事件mouseup

点击事件监听

利用点击事件,我们可以在鼠标点击的位置绘制各种图形,比如圆形等,示例代码如下:

代码示例

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>鼠标点击画圆</title><style>#canvas {border: 1px solid #000;}</style></head><body><canvas id="canvas" width="600" height="600"></canvas><script>const canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');function getCanvasCoordinates(event) {const rect = canvas.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;return { x, y };}function handleClick(event) {const {x,y} = getCanvasCoordinates(event);ctx.beginPath();ctx.arc(x, y, 20, 0, 2 * Math.PI);ctx.fillStyle = 'red';ctx.fill();}// 绑定鼠标点击事件canvas.addEventListener('click', handleClick);</script></body>
</html>

效果预览

鼠标点击画圆

拖动事件监听

实现拖动元素的功能,需要结合mousedownmousemovemouseup三个事件,我们以拖动一个矩形为例:

代码示例

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>鼠标拖动矩形</title><style>#canvas {border: 1px solid #000;}</style></head><body><canvas id="canvas" width="600" height="600"></canvas><script>const canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');function getCanvasCoordinates(event) {const rect = canvas.getBoundingClientRect();const x = event.clientX - rect.left;const y = event.clientY - rect.top;return {x,y};}// 矩形数组let rectangles = [];// 拖拽状态let isDragging = false;let startX, startY;let offsetX, offsetY;let draggedRect = null;function handleMouseDown(event) {const {x,y} = getCanvasCoordinates(event);for (const rect of rectangles) {if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {isDragging = true;draggedRect = rect;startX = x;startY = y;offsetX = x - rect.x;offsetY = y - rect.y;break;}}}function handleMouseMove(event) {if (isDragging) {const {x,y} = getCanvasCoordinates(event);if (draggedRect) {draggedRect.x = x - offsetX;draggedRect.y = y - offsetY;drawCanvas();}}}function handleMouseUp() {isDragging = false;draggedRect = null;}function drawCanvas() {ctx.clearRect(0, 0, canvas.width, canvas.height);for (const rect of rectangles) {ctx.beginPath();ctx.rect(rect.x, rect.y, rect.width, rect.height);ctx.fillStyle = 'blue';ctx.fill();}}// 绘制矩形function addRectangle() {const rect = {x: Math.random() * (canvas.width - 100),y: Math.random() * (canvas.height - 100),width: 80 + Math.random() * 40,height: 60 + Math.random() * 40,color: `hsl(${Math.random() * 360}, 70%, 60%)`};rectangles.push(rect);drawCanvas();}// 绑定鼠标按下事件,用于拖动起始canvas.addEventListener('mousedown', handleMouseDown);// 绑定鼠标移动事件,用于拖动过程canvas.addEventListener('mousemove', handleMouseMove);// 绑定鼠标松开事件,用于拖动结束canvas.addEventListener('mouseup', handleMouseUp);addRectangle();</script></body>
</html>

效果预览

鼠标拖动矩形

结语

本文主要介绍了在 Canvas 中处理鼠标点击和拖动事件的方法,对于文章中错误的地方或者有任何问题,欢迎在评论区留言分享!

http://www.dtcms.com/wzjs/376157.html

相关文章:

  • 贵港有网站建设的公司吗热搜榜排名今日事件
  • 手机如何自制网站网络营销百度百科
  • 广东网页制作与网站建设制作网站的工具
  • 在线直播网站开发实战项目seo是一种利用搜索引擎
  • 东莞网站建设58想要网站导航推广页
  • 网站在线客服代码球队积分排名
  • 蛋糕店网站建设模版中层管理者培训课程有哪些
  • 做景观素材有哪几个网站指数平台
  • 如何远程登录网站服务器西安网站优化推广方案
  • 怎么做网站seo关键词排名优化怎么做
  • 做独立网站需要注意什么好天津谷歌优化
  • 模板网站制作多少钱零基础学电脑培训班
  • 网站建设搭配品牌推广和品牌营销
  • wordpress恢复数据库菜单不见网站搜索引擎优化工具
  • 宝鸡手机网站开发百度员工收入工资表
  • 网站建设教程所需文字广州seo服务
  • 上海建网站公司有什么引流客源的软件
  • 我的世界做指令的网站注册网站在哪里注册
  • 宁波营销型网站建设品牌推广方案模板
  • 帮助企业做网站的销售互联网营销顾问是做什么的
  • 活动手机网站开发超级外链发布工具
  • 互联网公司花名大全男sem优化技巧
  • 关于建设信息网站的请示厦门小鱼网
  • 代理浏览器优化大师免费安装下载
  • 做药物分析必须知道的网站sem代运营托管公司
  • 龙口网站开发注册百度推广账号
  • 网站平台怎么做的好处东莞网站开发公司
  • 深圳做微信网站多少钱2021国内最好用免费建站系统
  • 三水网站建设如何推广引流
  • 学校建立网站seo广告优化多少钱