首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

利用canvas实现毛笔字帖(二)

针对write.js部分,前面有介绍,是用来实现通过鼠标(手指)写字核心部分。 分析一下要做事情。 当鼠标按下(mousedown),我们认为是毛笔落在纸上了。...当鼠标移动(mousemove),我们认为是毛笔移动。 当鼠标放开(mouseup),我们认为是毛笔收起了。 当鼠标移出canvas范围,我们认为毛笔移出字帖范围了,也认为是收笔了。 1...., e.clientY)) }; //移动,鼠标移动期间不断执行。...其实,实际上要在canvas是实现写字效果, 就是针对鼠标移动,不断根据鼠标上一次移动位置和下一次移动位置,调用canvasstroke() api 画密密麻麻衔接线段,看起来就像沿着鼠标描线一样...//根据传进来鼠标坐标,return 当前点相对于canvas(米字格字帖)左上角左边位置。

3.3K00

vue-grid-layout数据可视化图表面板优化过程所遇问题汇总

:其实很多初级前端同学只知道JS改变CSS会让浏览器回流,其实JS读取某些属性也会让浏览器回流,比如js请求以下style信息,触发回流(浏览器会立刻清空队列:)clientWidth、clientHeight...dataTransfer.getData()dragover,dragenter,dragleave中无法获取数据问题dataTransfer.getData()dragover,dragenter...,dragleave中无法获取数据问题dataTransfer.setData()中所设置数据是存储drag data store中,而根据W3C标准,drag data store有三种模式,Read...另外,我ondragover尝试给被拖拽元素添加class以改变其样式发现,虽然拖拽class已经改变,但在拖拽过程中样式并没有改变,而是等到拖拽动作完成后,也就是drop之后样式才被应用上去,...x,y坐标所以drogover 中,直接获取offsetY、offsetX 即可:const { offsetY: top, offsetX: left } = e;el.dragging.data

1.5K30
您找到你想要的搜索结果了吗?
是的
没有找到

使用 JavaScript 实现简单拖拽

拖动鼠标,触发 mousemove,不断获取鼠标的位置,并通过计算重新确定元素位置 释放师表,触发 mouseup,结束拖拽,确定元素位置并更新 被拖拽元素必须是相对父元素定位,或者是绝对定位...鼠标位置可以 event 对象中获得,常用属性有: clientX / clientY : 相对浏览器窗口坐标 offsetX / offsetY : 相对事件目标对象坐标 pageX / pageY...: 相对 document 对象坐标 一般鼠标的位置使用 pageX / pageY 获取,但是 IE 不支持这两个属性。...所以 IE 中使用 event.clientX + document.body.scrollLeft - document.body.clientLeft;获取鼠标的位置。...mousemove 当鼠标移动不断获取鼠标的位置,并计算元素坐标修改元素位置样式。

1.5K40

画布就是一切(一)— 画布编程基本模式

因为颜色变化根本原因是鼠标悬浮,鼠标是否悬浮在矩形上,是矩形固有属性正常情况下,鼠标和矩形发生交互,必然有是否悬浮这一情形;但是悬浮颜色却不是固有属性,在这个场景中,指定了悬浮颜色是红色,...当事件被触发,我们可以获取鼠标相对于 viewport(什么是viewport?)...坐标(event.clientX和event.clientY,这两个值并不是直接就是鼠标canvas中位置)。...: PS:实际上在对canvas有不同缩放、CSS样式加持下,坐标的计算会更加复杂,本文只是简单获取鼠标canvas中坐标,不做过多讨论,想要深入了解可以看这篇大佬文章:获取鼠标 canvas...:鼠标不断canvas上进行移动,移动过程中,鼠标矩形外部移动时候,控制台会不断输出文本:mouse in rect: false,而当鼠标一旦进入了矩形内部,控制台则会输出:mouse in

19420

画布就是一切(一)— 画布编程基本模式

因为颜色变化根本原因是鼠标悬浮,鼠标是否悬浮在矩形上,是矩形固有属性正常情况下,鼠标和矩形发生交互,必然有是否悬浮这一情形;但是悬浮颜色却不是固有属性,在这个场景中,指定了悬浮颜色是红色,...当事件被触发,我们可以获取鼠标相对于 viewport(什么是viewport?)...坐标(event.clientX和event.clientY,这两个值并不是直接就是鼠标canvas中位置)。...: PS:实际上在对canvas有不同缩放、CSS样式加持下,坐标的计算会更加复杂,本文只是简单获取鼠标canvas中坐标,不做过多讨论,想要深入了解可以看这篇大佬文章:获取鼠标 canvas...:鼠标不断canvas上进行移动,移动过程中,鼠标矩形外部移动时候,控制台会不断输出文本:mouse in rect: false,而当鼠标一旦进入了矩形内部,控制台则会输出:mouse in

18420

画布就是一切(一)— 画布编程基本模式

因为颜色变化根本原因是鼠标悬浮,鼠标是否悬浮在矩形上,是矩形固有属性正常情况下,鼠标和矩形发生交互,必然有是否悬浮这一情形;但是悬浮颜色却不是固有属性,在这个场景中,指定了悬浮颜色是红色,...当事件被触发,我们可以获取鼠标相对于 viewport(什么是viewport?)...坐标(event.clientX和event.clientY,这两个值并不是直接就是鼠标canvas中位置)。...: PS:实际上在对canvas有不同缩放、CSS样式加持下,坐标的计算会更加复杂,本文只是简单获取鼠标canvas中坐标,不做过多讨论,想要深入了解可以看这篇大佬文章:获取鼠标 canvas...:鼠标不断canvas上进行移动,移动过程中,鼠标矩形外部移动时候,控制台会不断输出文本:mouse in rect: false,而当鼠标一旦进入了矩形内部,控制台则会输出:mouse in

22210

JS之clientX,clientY,screenX,screenY,offsetX,offsetY区别测试

首先需要知道clientX,clientY,screenX,screenY,offsetX,offsetY 是鼠标事件对象下几个属性....,offsetY 这几个属性是“鼠标事件对象”下属性,所以必然是“鼠标事件”发生时候才会有意义; clientX:当鼠标事件发生(不管是onclick,还是omousemove,onmouseover...当我鼠标放到浏览器有效区域 0 ,0 处,clientX为0,clientY为0; 而screenX为0,screenY为85,因为鼠标“浏览器有效区域”里x坐标就是0,y坐标也是0,而鼠标“...是鼠标相对以浏览器有效区域Y轴坐标, 上图中我鼠标浏览器有效区域里 x坐标是200px,y坐标是0;而screenX,screenY则是相对以整个显示屏幕区域而言。...第一次鼠标接近test按钮左上角点击 ? ? 相信看到这里应该能明白offsetX和offsetY是获取什么值了吧,获取就是鼠标相对test这个按钮x坐标和y坐标

1K40

javascript坐标:event.x、event.clientX、event.offsetX、event.screenX 用法

clientX 设置或获取鼠标指针位置相对于窗口客户区域 x 坐标,其中客户区域不包括窗口自身控件和滚动条。...event.clientX返回事件发生,mouse相对于客户窗口X坐标,event.X也一样。...clientX:相对于客户区域x坐标位置,不包括滚动条,就是正文区域。 offsetx:设置或者是得到鼠标相对于目标事件父元素内边界x坐标位置。...返回事件发生,mouse相对于客户窗口X坐标 event.X也一样 但是如果设置事件对象定位属性值为relative event.clientX不变 而event.X返回事件对象相对于本体坐标...取消该事件起泡 clientX 检索与窗口客户区域有关鼠标光标的X坐标属性为只读,没有默认值。

1.6K30

使用React和Node构建实时协作白板应用

handleMouseDown 函数中,我们利用初始 clientX 和 clientY 值来标记绘图起点。当用户点击鼠标,我们希望记录点击发生位置,因为这将是他们即将绘制线条起点。..., clientY); setElements((prevState) => [...prevState, element]); }; 处理鼠标移动事件:鼠标按钮仍按下情况下,我们不断更新 handleMouseDown...: 现在,让我们来测试我们应用程序:从上面的视频中,我们可以看到当我们选择矩形,我们可以根据鼠标坐标我们白板上绘制矩形。...存储可拖动元素:当用户选择工具处于活动状态且光标位于元素上方按下鼠标,我们将把该元素及光标与元素左上角之间初始偏移量存储一个状态中。...(用于绘制代码) } }; 更新元素坐标 handleMouseMove 函数中,当用户处于“移动”状态(即拖动元素),我们根据鼠标光标的位置和初始偏移量计算元素新位置。

42620

前端day15-JS(WebApi)学习笔记(三大家族、事件对象、getComputedStyle)

param2:伪元素 一般不传或者传null 返回值: CSSStyleDeclaration 对象:存储元素一切样式属性 三种语法区别: 1.点语法特点: 只能获取行内属性无法获取行外属性 获取是...) 4.既可以读取,也可以设置 3.offsetWidth与offsetHeight:获取是元素实际宽高= width+border+padding 1.可以获取行内以及内嵌宽高...2.获取值是一个number类型,不带单位 3.获取宽高包含border和padding 4.只能读取,不能设置修改 4.offsetLeft和offsetTop offsetLeft...:元素内容真实宽高 scrollLeft和scrollTop:元素滚动超出内容区域部分 onscroll:元素滚动条事件,只要滚动就会触发 3.png 获取网页滚动距离 1.如何获取页面的HTML...) 1.什么是事件对象event:当某一个事件被触发(例如点击事件),此时浏览器会记录触发某些信息, 例如你是在哪个位置点击,你点击时候是直接鼠标左键点击,还是鼠标左右键一起点击(骚操作)

65300

我做了一个在线白板!!!

其实我们鼠标另一个世界,这个世界坐标原点在左上角,而前面我们把画布世界原点移动到中心位置了,所以它们虽然是平行世界,但是奈何坐标系不一样,所以需要把我们鼠标的位置转换成画布位置: const...移动矩形 移动矩形很简单,修改它x、y即可,首先计算鼠标当前位置和鼠标按下位置之差,然后把这个差值加到鼠标按下那一瞬间矩形x、y上作为矩形新坐标,那么这之前又得来修改一下咱们矩形模子:...矩形旋转后会发现一个问题,我们明明鼠标点击进行边框上,但是却无法激活它,矩形想摆脱我们控制?...: 还是老掉牙原因,无论怎么滚动缩放旋转,矩形x、y本质都是不变,没办法,转换吧: 同样是修改鼠标clientX、clientY,先把鼠标坐标转成画布坐标,然后缩小画布缩放值,最后再转成屏幕坐标即可...这个怎么做呢,很简单,因为网格也相当于是从左上角开始绘制,所以我们获取鼠标clientX、clientY后,对网格大小进行取余,然后再减去这个余数,即可得到最近可以吸附到网格坐标: 如上图所示

3.5K30

用JavaScript实现div鼠标拖拽效果

一个简单可拖动div,随着鼠标的移动,实现原理鼠标按下根据onmousemove事件来动态获取鼠标坐标位置以此来更新div位置,实现前提div要有一个定位效果,不然的话是移动不了它。...red; } HTML 首先先分析一下需求,这个需求就是点击鼠标按下你才能移动并改变div页面中位置。...;//移动状态判断鼠标按下才能移动 e.clientX鼠标x轴位置, e.clientY鼠标Y轴位置, box.offsetLeft获取div距离左边距离, box.offsetTop获取div...- x 鼠标坐标减去偏差得到div距离左边距离, e.clientY - y 鼠标坐标减去偏差得到div距离上边距离。...给divleft,top重新赋值 鼠标松开 为了放置鼠标移动过快时间无法正确处理所以事件绑定到document上 document.onmouseup = function() {

2.5K30

从图片裁剪来聊聊前端二进制

) onloadstart 读取开始触发 onprogress 读取中 示例 下面我们尝试把一个文件内容通过字符串方式读取出来: <input type="file" id='upload' /...简单说:JS中,有两个构造函数 File 和 Blob, 而File继承了所有Blob属性。 所以我们看来,File对象可以看作一种特殊Blob对象。...整个需求分以下四步: 1、获取文件并读取文件。 2、获取裁剪坐标。 3、裁剪图片。 4、读取裁剪后图片预览并上传。 获取文件并读取文件 首先来看下上面第一步提到获取文件。...获取裁剪坐标 这里主要是mousedown、mousemove、mouseup事件结合使用。 mousedown 鼠标按下事件。...这里要记录下鼠标按下开始坐标,即startX与startY,同时要将标志位startDrag设为true,标识鼠标开始移动。

1.6K20

原生 JS 手写一个优雅图片预览功能,带你吃透背后原理

监听事件中我们可以通过 event 对象获取各种属性,例如常用 offsetX、offsetY 相对偏移量,clientX、clientY 距离窗口坐标和纵坐标等。...,所以在上面的代码中,我们通过鼠标当前偏移量即 offsetX、offsetY 值改变 transform-origin 来动态设置缩放原点,效果如下:图片乍一看好像没什么问题,事实上如果鼠标不断移动且幅度很大时会出现抖动...移动图片实现是比较简单每次指针按下我们记录 clientX、clientY 为初始值,移动时计算当前值与初始点位差值加到 translate 偏移量中即可。...我们画两张图看下,原点变化前后图像坐标点发生了哪些变化:图片如上图,原点为 O ,我们取右下角点设为点 A,图像放大2倍 A 点变换到 B 点。...这么说有点抽象,我们还是回到代码中,双指缩放将这个偏移量减掉,同样PC端缩放中,我们也加入对偏移量修正:let scaleOrigin = { x: 0, y: 0, }// 获取中心改变偏差

2.5K81

Canvas 绘图技术:如何实现签名板签名功能以及导出图片

思路是,签名版是一个可以在上面绘制签名区域,我们可以通过鼠标或触摸屏幕来绘制签名。 而在 Canvas 上绘制签名版关键是监听鼠标或触摸事件,并根据事件坐标绘制签名。...接着使用 ctx.moveTo() 方法将画笔移动到鼠标点击位置,e.clientX 和 e.clientY 表示鼠标相对于浏览器窗口坐标,而 canvas.offsetLeft 和 canvas.offsetTop...监听鼠标 mousemove 事件 当然,我们也需要监听鼠标的 mousemove 事件。当鼠标移动,如果 drawing 变量值为 false,则表示当前没有绘制,直接返回。...这样就可以实现随着鼠标移动不断绘制线条效果。 canvas.addEventListener('mousemove', (e) => { if (!...,鼠标松开结束绘制效果,下面是我效果图,哈哈哈,有一点小丑。

41142
领券