当前第2页 返回上一页
6、移动鼠标的时候,没有鼠标长按事件,又该怎么监听呢?
这里用到的小技巧是在onmousedown内部再执行一个onmousemove(鼠标移动)事件,这样就能监听按住鼠标并且移动了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | theCanvas.onmousedown = function (e) {
let ele = windowToCanvas(theCanvas, e.clientX, e.clientY)
let { x, y } = ele
context.moveTo(x, y)
theCanvas.onmousemove = (e) => {
let ele = windowToCanvas(theCanvas, e.clientX, e.clientY)
let { x, y } = ele
context.lineTo(x, y)
context.stroke()
}
}
|
7、鼠标松开的时候,不再绘制路径。
有什么办法可以让onmouseup事件中阻止掉上面监听的2种事件呢?方法挺多的,设置onmousedown和onmousemove为null算是一种,我这里用到了“开关”。isAllowDrawLine设置为bool值,来控制函数是否执行,具体代码可以看下面完整的源码。
源码
分为3个文件,index.html、main.js、utils.js,这里用到了es6的语法,我是使用parcle配置好了开发环境,所以不会有报错,如果你直接复制代码,运行的时候出现错误,在无法升级浏览器的情况下,可以将es6语法改成es5.
1、index.html
上面已经展示了,不再复述。
2、main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import { windowToCanvas } from './utils'
( function () {
let theCanvas = document.querySelector( '#theCanvas' )
if (!theCanvas || !theCanvas.getContext) {
return false
} else {
let context = theCanvas.getContext( '2d' )
let isAllowDrawLine = false
theCanvas.onmousedown = function (e) {
isAllowDrawLine = true
let ele = windowToCanvas(theCanvas, e.clientX, e.clientY)
let { x, y } = ele
context.moveTo(x, y)
theCanvas.onmousemove = (e) => {
if (isAllowDrawLine) {
let ele = windowToCanvas(theCanvas, e.clientX, e.clientY)
let { x, y } = ele
context.lineTo(x, y)
context.stroke()
}
}
}
theCanvas.onmouseup = function () {
isAllowDrawLine = false
}
}
})()
|
3、utils.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | const windowToCanvas = (canvas, x, y) => {
let rect = canvas.getBoundingClientRect()
return {
x: x - rect.left * (canvas.width/rect.width),
y: y - rect.top * (canvas.height/rect.height)
}
}
export {
windowToCanvas
}
|
总结
这里有个误区,我用的是canvas对象绑定事件 theCanvas.onmouseup,其实canvas不能绑定事件,真正绑定的是document和window。但是由于浏览器会自动帮你判断并且移交事件处理,所以完全不用担心。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
用HTML5
Canvas来绘制三角形和矩形等多边形的方法
以上就是如何利用canvas实现按住鼠标移动绘制出轨迹的详细内容,更多文章请关注木庄网络博客!
返回前面的内容
相关阅读 >>
实现弹幕效果的方法总结(css和canvas)
html5实战-canvas绘制钟表的示例代码分享
canvas贝塞尔公式推导与物体跟随复杂曲线轨迹运动
关于canvas的一个实例教程--刮刮乐
h5在canvas中实现自定义路径动画
canvas绘制工作流之绘制节点
如何使用canvas画出平滑的曲线?(代码)
怎样用canvas来绘制彩色七巧板
canvas中普通动效与粒子动效的实现 方法介绍(代码示例)
h5 canvas api中drawimage(图像进行缩放或裁剪)的使用实例
更多相关阅读请进入《canvas》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » 如何利用canvas实现按住鼠标移动绘制出轨迹