使用canvas开发框选功能模块demo

场景:新需求需要在实时视频框选算法识别的区域.

第一版本开发:使用td类似画图去遍历很呆板,线段容易出现锯齿,新能不强---舍弃

最新一版本开发:使用canvas去开发,新能改善,去除锯齿等问题

功能如图👇:

功能:

1.点击出现线段

2.双击闭合或者单击闭合

3.颜色改变-线段粗细改变-线段拐角添加圆点或者其它样式自定义接口

4.清除功能

5.输出点位位置

注意:需要源码关注留言✌

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Canvas上实现框选功能,可以按照以下步骤进行操作: 1. 监听鼠标事件:使用`mousedown`、`mousemove`和`mouseup`等事件来捕获鼠标在Canvas上的操作。 2. 记录起始点:在鼠标按下时,记录下鼠标的坐标作为框选的起始点。 3. 绘制选择框:在鼠标移动过程中,根据鼠标的当前位置和起始点的位置计算出选择框的宽度和高度,并在Canvas上绘制一个边框矩形来表示选择框。 4. 确定选中元素:在鼠标松开时,根据选择框的位置和大小,判断Canvas上哪些元素被选择到。 下面是一个示例代码,可以帮助你理解如何实现这个功能: ```javascript // 获取Canvas元素 const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // 记录起始点和选择框的位置 let startX, startY, width, height; // 保存所有可选元素的位置 const elements = [ { x: 50, y: 50, width: 50, height: 50 }, { x: 150, y: 100, width: 50, height: 50 }, { x: 200, y: 200, width: 100, height: 100 } ]; // 监听鼠标事件 canvas.addEventListener('mousedown', (e) => { startX = e.clientX - canvas.offsetLeft; startY = e.clientY - canvas.offsetTop; }); canvas.addEventListener('mousemove', (e) => { if (startX && startY) { width = e.clientX - canvas.offsetLeft - startX; height = e.clientY - canvas.offsetTop - startY; // 清空Canvas ctx.clearRect(0, 0, canvas.width, canvas.height); // 绘制选择框 ctx.strokeStyle = 'blue'; ctx.strokeRect(startX, startY, width, height); } }); canvas.addEventListener('mouseup', () => { // 确定选中元素 const selectedElements = elements.filter((element) => { return element.x >= startX && element.x + element.width <= startX + width && element.y >= startY && element.y + element.height <= startY + height; }); // 打印选中元素 console.log(selectedElements); // 清空选择框 startX = null; startY = null; width = null; height = null; }); ``` 在上面的代码中,我们使用`mousedown`事件记录起始点,使用`mousemove`事件计算选择框的位置和大小,并在Canvas上绘制选择框。在`mouseup`事件中,我们根据选择框的位置和大小判断哪些元素被选中,并打印出来。 你可以根据自己的需求进行修改和扩展,比如添加元素的绘制、多选等功能。希望对你有所帮助!如果还有其他问题,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值