JS前端使用canvas实现物体的点选示例

yizhihongxing

下面是“JS前端使用canvas实现物体的点选示例”的完整攻略:

简介

本攻略旨在帮助JS前端开发者使用canvas实现物体的点选功能。点选,即用户点击鼠标后能够判断该处是否落在某个物体上,从而实现交互操作。

准备

在开始编写代码前,需要准备以下工具和材料:
- 编辑器:Visual Studio Code、Sublime Text、Atom等
- 浏览器:Chrome、Safari、Firefox等(建议使用Chrome)
- canvas画板:可以通过HTML中的<canvas>标签创建
- JavaScript库:本攻略使用了jQuery库,也可以使用其他库或不使用库。
- 图形资源:本攻略使用了一个矩形和一个圆形

实现步骤

  1. 创建和初始化canvas画板
    ```html


    通过document.getElementById获取canvas元素,再通过getContext```获取2D画布上下文。

  2. 在画板上绘制图形
    ```js
    context.fillStyle = "#00A0FF";
    context.fillRect(100, 100, 100, 100);

    context.fillStyle = "#FFA500";
    context.beginPath();
    context.arc(300, 300, 50, 0, Math.PI * 2);
    context.fill();
    ```
    这里绘制了一个蓝色的矩形和一个橙色的圆形,具体坐标和半径等可以自行设置。

  3. 监听鼠标点击事件
    js
    $("#canvas").click(function(e) {
    let x = e.pageX - this.offsetLeft;
    let y = e.pageY - this.offsetTop;
    console.log(x, y);
    });

    在canvas上注册鼠标点击事件,通过e.pageXe.pageY获取鼠标点击处相对于画板左上角的横纵坐标。

  4. 判断点击位置是否在图形内
    ```js
    let rectX = 100, rectY = 100, rectW = 100, rectH = 100;
    let radius = 50, centerX = 300, centerY = 300;

    $("#canvas").click(function(e) {
    let x = e.pageX - this.offsetLeft;
    let y = e.pageY - this.offsetTop;

    if (x >= rectX && x <= rectX + rectW && y >= rectY && y <= rectY + rectH) {
    console.log("点击了矩形");
    } else if ((x - centerX) * (x - centerX) + (y - centerY) * (y - centerY) <= radius * radius) {
    console.log("点击了圆形");
    } else {
    console.log("未点击任何图形");
    }
    });
    ```
    通过比较鼠标点击位置和图形位置、大小,判断点击位置是否在图形内。以上代码展示了判断矩形和圆形,其他图形判断方式类似。

示例说明

示例一:小球消失

在这个示例中,我们将在html页面上绘制一个小球,每次点击小球,小球就会消失。

首先,需要在html中创建画板和小球:

<canvas id="canvas" width="500" height="500"></canvas>

<script>
  let canvas = document.getElementById("canvas");
  let context = canvas.getContext("2d");

  let ballX = 100, ballY = 100, ballR = 50;

  context.beginPath();
  context.arc(ballX, ballY, ballR, 0, Math.PI * 2);
  context.fillStyle = "#FFA500";
  context.fill();
</script>

绑定鼠标点击事件,并在事件处理函数中判断点击位置是否在小球内,若在,则清空画板,否则不做任何处理。

$("#canvas").click(function(e) {
  let x = e.pageX - this.offsetLeft;
  let y = e.pageY - this.offsetTop;

  let distance = Math.sqrt((x - ballX) * (x - ballX) + (y - ballY) * (y - ballY));
  if (distance <= ballR) {
    context.clearRect(0, 0, canvas.width, canvas.height);
  }
});

这里通过勾股定理计算鼠标点击位置与小球圆心的距离,若小于等于小球半径,则表示点击在小球内。

示例二:物体跟随鼠标移动

在这个示例中,我们将在html页面上绘制一个矩形和一个圆形,使得物体可以跟随鼠标移动。

首先,需要在html中创建画板和矩形、圆形:

<canvas id="canvas" width="500" height="500"></canvas>

<script>
  let canvas = document.getElementById("canvas");
  let context = canvas.getContext("2d");

  let rectX = 100, rectY = 100, rectW = 100, rectH = 100;
  let radius = 50, centerX = 300, centerY = 300;

  context.fillStyle = "#00A0FF";
  context.fillRect(rectX, rectY, rectW, rectH);

  context.fillStyle = "#FFA500";
  context.beginPath();
  context.arc(centerX, centerY, radius, 0, Math.PI * 2);
  context.fill();
</script>

绑定鼠标移动事件,并在事件处理函数中获取鼠标位置,并通过requestAnimationFrame不断地重绘图形。

let rectLeft, rectTop, circleLeft, circleTop;

$("#canvas").mousemove(function(e) {
  rectLeft = e.pageX - this.offsetLeft - rectW / 2;
  rectTop = e.pageY - this.offsetTop - rectH / 2;
  circleLeft = e.pageX - this.offsetLeft - radius;
  circleTop = e.pageY - this.offsetTop - radius;

  animate();
});

function animate() {
  context.clearRect(0, 0, canvas.width, canvas.height);
  context.fillStyle = "#00A0FF";
  context.fillRect(rectLeft, rectTop, rectW, rectH);

  context.fillStyle = "#FFA500";
  context.beginPath();
  context.arc(circleLeft, circleTop, radius, 0, Math.PI * 2);
  context.fill();

  requestAnimationFrame(animate);
}

这里通过减去图形的一半尺寸,将图形的中心点(即矩形的左上角和圆形的圆心)与鼠标位置对齐。并通过不断地重绘来实现跟随移动。注意需要清空画板,否则图形会留下痕迹。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS前端使用canvas实现物体的点选示例 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • javascript字符串与数组转换汇总

    JavaScript字符串与数组转换汇总 在JavaScript中,字符串和数组是我们常用的数据类型之一。但是,在实际的工程中可能需要字符串和数组之间进行转换,这时候就需要借助一些强大的转换方法来实现。这里我们集中介绍一下JavaScript字符串与数组转换的方法以及使用场景。 1. 字符串转换为数组 字符串转换为数组通常采用以下方法: 1.1 split(…

    JavaScript 2023年5月27日
    00
  • 总结javascript中的六种迭代器

    下面是对 JavaScript 中的六种迭代器的详细讲解。 什么是迭代器 在开始讲解迭代器之前,先来了解一下什么是迭代器。迭代器是一种设计模式,用于遍历任何类型的数据。简单来说,迭代器就是一个对象,该对象允许在一次运行中获取序列中的各个元素。 JavaScript 中的六种迭代器 JavaScript 提供了内置的六种迭代器,分别为: forEach() m…

    JavaScript 2023年5月27日
    00
  • js显示动态时间的方法详解

    下面是关于”js显示动态时间的方法详解”的完整攻略。 一、简介 在网页或应用中,展示动态时间是非常常见的需求。JavaScript作为一门严谨、高效、灵活、结构化的脚本语言,其展示动态时间的方法也就显得格外的简单和方便。 二、JS展示动态时间的方法 2.1. 获取时间 我们可以使用JS的Date()来获取当前时间。 var currentDate = new…

    JavaScript 2023年5月27日
    00
  • HTML+JavaScript模拟实现简单的时钟效果

    下面是HTML+JavaScript模拟实现简单的时钟效果的攻略: 准备工作 首先需要编写一个HTML页面,里面包含用于显示时钟的元素,可以是一个<div>、<span>等等。其中,我们可以用CSS设置时钟的样式,比如字体大小、颜色、边框等。 编写JavaScript代码 获取当前时间 JavaScript提供了Date()对象,可以…

    JavaScript 2023年5月27日
    00
  • JS中的异常处理方法分享

    JS中的异常处理是一个重要的主题,因为JS是一门弱类型、动态语言,如果没有健壮的异常处理机制,程序就会出现各种意外的运行错误。在这里,我将分享一些JS中异常处理的方法。 try-catch try-catch是JS中处理异常的最常用方法,可以在try代码块中放置可能会抛出异常的代码块,如果有异常被抛出,就会被catch代码块捕获,并进行相应的处理。例如: t…

    JavaScript 2023年5月27日
    00
  • vue实现微信浏览器左上角返回按钮拦截功能

    介绍:Vue可以通过使用路由导航守卫来拦截某些操作,其中之一就是拦截微信浏览器左上角的返回按钮。本攻略将详细介绍如何使用Vue及路由导航守卫实现微信浏览器左上角返回按钮的拦截功能。 步骤: 1.安装Vue Router 安装Vue Router是实现路由动态跳转的必要前提。使用npm或yarn,运行以下命令: npm install vue-router O…

    JavaScript 2023年6月11日
    00
  • Javascript toExponential 方法

    JavaScript 中的 toExponential() 方法用于将数字转换为指数形式的字符串。该方法返回一个字符串,其中包含指数形式的数字,可以指定小数点后的位数和指数的位数。在本教程中,我们将详细介绍 toExponential() 方法的使用方法。 toExponential() 方法的基本语法如下: number.toExponential(fra…

    JavaScript 2023年5月11日
    00
  • javascript实现C语言经典程序题

    为了实现C语言经典程序题,我们需要先掌握一些基本概念和语法,包括控制结构、循环、条件语句、函数等。在掌握了这些基础后,我们可以通过JavaScript语言的灵活性和多功能性来实现这些经典的程序题目。 下面就来介绍如何实现一些经典的程序题目: 示例一:求字符串中子串的个数 题目描述:给定一个字符串和它的一个子串,要求在字符串中找到子串出现的次数。 // 方法一…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部