canvas实现鼠标滚轮滚动缩放画布

const canvas = document.createElement('canvas')
canvas.width = 400
canvas.height = 400
canvas.className = 'main_canvas'
document.body.appendChild(canvas)
const ctx = canvas.getContext('2d')

const info = {
  offset: {x: 0, y: 0},
  scale: 1,
  scaleStep: 0.1,
  minScale: 0.5,
  maxScale: 2
}

// 获取鼠标在canvas画布上的坐标
const getCanvasPostion = (e) => {
  return {
    x: e.offsetX,
    y: e.offsetY,
  }
}

//计算呢两点之间的距离
const getDistance = (p1, p2) => {
  return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2)
}

//更新画布
const updateCanvas = () => {
  const backgroundImage = new Image() // 创建Image对象
  backgroundImage.src = 'https://ts1.cn.mm.bing.net/th/id/R-C.66d7b796377883a92aad65b283ef1f84?rik=sQ%2fKoYAcr%2bOwsw&riu=http%3a%2f%2fwww.quazero.com%2fuploads%2fallimg%2f140305%2f1-140305131415.jpg&ehk=Hxl%2fQ9pbEiuuybrGWTEPJOhvrFK9C3vyCcWicooXfNE%3d&risl=&pid=ImgRaw&r=0' //设置图片路径
  backgroundImage.onload = function(){
    console.log('图片加载完成');
    ctx.drawImage(backgroundImage, 0, 0, canvas.width, canvas.height)  //绘制背景图片
  }
}

updateCanvas()

//监听滚轮滚动缩放画布
canvas.addEventListener('wheel', (e) => {
  e.preventDefault()
  ctx.clearRect(0, 0, canvas.width, canvas.height)
  const canvasPosition = getCanvasPostion(e)  //获取画布上的事件坐标
  console.log(canvasPosition)
  const realCanvasPosition = { //鼠标在画布上的坐标
    x: canvasPosition.x - info.offset.x,
    y: canvasPosition.y - info.offset.y
  }
  // 放缩时产生的偏移量
  const deltaX = realCanvasPosition.x / info.scale * info.scaleStep
  const deltaY = realCanvasPosition.y / info.scale * info.scaleStep
  if (e.wheelDelta > 0 && info.scale < info.maxScale) {
    console.log('上滚');
    info.offset.x  -= deltaX
    info.offset.y  -= deltaY
    info.scale += info.scaleStep
  }else if (e.wheelDelta <= 0 && info.scale > info.minScale){
    console.log('下滚');
    info.offset.x  += deltaX
    info.offset.y  += deltaY
    info.scale -= info.scaleStep
  }
  ctx.setTransform(info.scale, 0, 0, info.scale, info.offset.x, info.offset.y)
  updateCanvas()
})

canvas实现鼠标滚轮滚动缩放画布效果

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为您提供一些实现鼠标滚动缩放和移动图片的代码。首先,您需要在 HTML 中创建一个 canvas 元素和一个图片元素,然后将图片绘制到 canvas 上。接下来,在 JavaScript 中添加以下代码: ```javascript // 获取 canvas 和图片元素 var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var img = document.getElementById('img'); // 定义变量 var scale = 1; // 缩放比例 var translateX = 0; // 水平位移 var translateY = 0; // 垂直位移 // 绘制图片 ctx.drawImage(img, translateX, translateY, img.width * scale, img.height * scale); // 监听鼠标滚轮事件 canvas.addEventListener('mousewheel', function(e) { e.preventDefault(); // 阻止默认事件 var delta = e.wheelDelta / 1000; // 获取滚动值 scale += delta; // 更新缩放比例 if (scale < 0.1) scale = 0.1; // 最小缩放比例 if (scale > 10) scale = 10; // 最大缩放比例 ctx.clearRect(0, 0, canvas.width, canvas.height); // 清空画布 ctx.drawImage(img, translateX, translateY, img.width * scale, img.height * scale); // 重新绘制图片 }); // 监听鼠标拖动事件 canvas.addEventListener('mousedown', function(e) { var startX = e.pageX - canvas.offsetLeft; // 获取起始坐标 var startY = e.pageY - canvas.offsetTop; canvas.addEventListener('mousemove', move); // 监听鼠标移动事件 function move(e) { translateX = e.pageX - startX; // 更新位移值 translateY = e.pageY - startY; ctx.clearRect(0, 0, canvas.width, canvas.height); // 清空画布 ctx.drawImage(img, translateX, translateY, img.width * scale, img.height * scale); // 重新绘制图片 } canvas.addEventListener('mouseup', function() { canvas.removeEventListener('mousemove', move); // 移除监听器 }); }); ``` 上述代码实现鼠标滚动缩放鼠标拖动移动图片的功能。您可以根据需要进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值