canvas导出框选部分,位置不对,大小不对

如果你的canvas是被缩放了的,导出图片需要进行比例缩放

在这里插入图片描述
getBoundingClientRect() 方法返回元素的大小及其相对于视口的位置

const bbox = canvas.getBoundingClientRect();
const widthRatio = canvas.width / bbox.width;
const heightRatio = canvas.
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在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`事件中,我们根据选择框的位置大小判断哪些元素被选中,并打印出来。 你可以根据自己的需求进行修改和扩展,比如添加元素的绘制、多选等功能。希望对你有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值