什么叫橡皮筋式

指画图时橡皮筋一样伸缩自如。。

例子如下?

思路

思路很简单,只有橡皮筋式绘制功能要注意,以下总结mousedown,mousemove,mouseup三个阶段的思路

mousedown:记录start位置,drag(记录是否处于拖动状态)设置为true,getImageData(橡皮筋效果关键1)

mousemove:获取拖动时的位置pos,putImageData(对应getImageData,橡皮筋效果关键2),根据pos与start画直线

mouseup:drag恢复为false

关键就在于putImageData()与getImageData()这两个canvas的方法,putImageData()记录了鼠标点下时的图像,getImageData()对应还原。如果没有执行这两个方法就会出现以下的效果

putImageData()相当于把“扫描”出来的线都擦掉

代码

let canvas = document.getElementById('canvas'),

ctx = canvas.getContext('2d'),

canvasLeft = canvas.getBoundingClientRect().left, //getBoundingClientRect()获取元素位置

canvasTop = canvas.getBoundingClientRect().top;

let imageData; //记录图像数据

let start = new Map([['x',null],['y',null]]);

let drag = false;//记录是否处于拖动状态

canvas.onmousedown = function (e) {

let pos = positionInCanvas(e, canvasLeft, canvasTop);

start.set('x', pos.x);

start.set('y', pos.y);

drag = true;

//记录imageData

imageData = ctx.getImageData(0,0,canvas.width,canvas.height);

}

canvas.onmousemove = function (e) {

if(drag === true){

let pos = positionInCanvas(e, canvasLeft, canvasTop);

//相当于把扫描出来的线都擦掉,重新画

ctx.putImageData(imageData, 0, 0);

ctx.beginPath();

ctx.moveTo(start.get('x'), start.get('y'));

ctx.lineTo(pos.x, pos.y);

ctx.stroke();

}

}

canvas.onmouseup = function (e) {

drag = false;

}

function positionInCanvas (e, canvasLeft, canvasTop) {//获取canvas中鼠标点击位置

return {

x:e.clientX - canvasLeft,

y:e.clientY - canvasTop

}

}

橡皮筋画直线c 语言,canvas——橡皮筋式线条绘图应用相关推荐

  1. 橡皮筋画直线c 语言,canvas 橡皮筋式线条绘图应用方法

    什么叫橡皮筋式 指画图时橡皮筋一样伸缩自如.. 例子如下:point_down: 思路 思路很简单,只有橡皮筋式绘制功能要注意,以下总结mousedown,mousemove,mouseup三个阶段的 ...

  2. canvas——橡皮筋式线条绘图应用

    什么叫橡皮筋式 指画图时橡皮筋一样伸缩自如.. 例子如下? 思路 思路很简单,只有橡皮筋式绘制功能要注意,以下总结mousedown,mousemove,mouseup三个阶段的思路 mousedow ...

  3. html5画直线箭头,HTML5 canvas画带箭头的虚线

    今天给大家讲解的是在HTML5 canvas画带箭头的虚线.关于Canvas 对象表示一个 HTML 画布元素 -.它没有自己的行为,但是定义了一个 API 支持脚本化客户端绘图操作. 本案例注意事项 ...

  4. Canvas---Canvas版画图,坐标轴绘制,网格绘制,橡皮筋式画直线

    使用Canvas实现画图程序. 这个量还是比较大的,请允许我慢慢来. 目前做到了:坐标轴的绘制,网格绘制,橡皮筋式画直线 目前的不足:没有应用多个图层将网格,坐标轴与实际绘画区域分离 接下要做:为橡皮 ...

  5. HTML怎么在矩形上画直线,【绘制】HTML5 Canvas 绘画画板,实现鼠标画线条,画矩形或选区(图文、示例)...

    个人处女做<Canvas系列教程>在个人Github上正在连载更新,但愿能获得您的关注和支持,让我有更多的动力进行创做.html 教程介绍.教程目录等能在README里查阅.git 目录函 ...

  6. html5点线的设置,html5 Canvas画图教程(2)—画直线与设置线条的样式如颜色/端点/交汇点...

    如果你还不知道canvas是什么,可以看看. 在学画画的时候,线条是最基本的了,而线条的连接可以组成任何图形.在canvas中也是如此. 在开始之前我们先拿出画布和画笔: 复制代码代码如下: var ...

  7. Silverlight学习笔记三(鼠标点击动态画直线|动态设置Ellipse的Canvas.Top与Canvas.Left|动态设置Stroke属性的方法。)...

    我有可能需要把AutoCAD的部分功能搬到浏览器上,先练习一下画直线的方法.如图: MainPage.xaml代码: 大气象 <UserControl x:Class="DrawLin ...

  8. C语言画直线~Bresenham方法

    前言 由于项目上遇到了棘手的问题,给定坐标需要实现C绘制直线的驱动函数,绘制直线一般都是显示屏的底层函数,本想着找个显示屏的驱动看下drawline源码,但仔细想一想会不会底层用的是汇编尼,于是便放弃 ...

  9. java canvas类画直线_canvas教程(二) 绘制直线

    经过 canvas 教程(一) 简介 我们知道了 canvas 的一些基本情况 而本次是给大家带来直线的绘制 canvas 中,基本图形有两种,一种是直线,还有一种是曲线但是无论是直线还是曲线,我们都 ...

最新文章

  1. 人均年薪250万, 拥有400名博士, 这家AI公司去年亏27亿
  2. ORM 关系对象映射 基础知识点
  3. UOJ#449. 【集训队作业2018】喂鸽子
  4. Android 第十五课 如何使用LitePal从SQLite数据库中删除数据(十四课用来保留讲解如何向SQLite数据库中存入数据)
  5. 仿minecraft游戏 linux,【图片】【Codea制作仿MineCraft3D游戏】Craft Ver. 0.1发布(开源)【codea吧】_百度贴吧...
  6. 《Java线程与并发编程实践》—— 2.6 小结
  7. WinForm中ComBoBox绑定显示值和实际值
  8. 如何提高go代码覆盖率_如何提高代码质量?
  9. (day 49 - 另起数组牺牲空间换取时间 ) 剑指 Offer 66. 构建乘积数组
  10. 我的世界Java版最大村庄_《我的世界》MC中最大的村庄种子,PC和PE都可以用
  11. SCSA 模拟题 知识点 (一)
  12. ssm+共享图书管理系统 毕业设计-附源码151121
  13. 训练集,验证集,测试集分别是什么
  14. 使用java Graphics 绘图工具生成顺丰快递电子面单
  15. epsonl360打印机连接电脑_epsonl360打印机脱机如何解决
  16. 计算机地理绘图软件叫什么,地理教师如何选择理想的绘图软件 ──基于对常用绘图软件的比较与分析...
  17. jadx-gui 重命名功能
  18. Python优化算法02——遗传算法
  19. MyBatis 报错 Could not initialize class
  20. C++后端开发面试题精选

热门文章

  1. 计算机音乐抖音神曲,2019抖音十大神曲纯音乐 2019抖音最火的纯音乐盘点
  2. windows 2000 下修改MAC地址
  3. JS动态给变量取名字
  4. Autodesk CAD 2011
  5. 程序员逛银饰店笑话一则
  6. 【元胞自动机】元胞自动机生态养殖【含Matlab源码 657期】
  7. C语言——青蛙跳台阶问题详解(递归)
  8. hnu小学期软件实训-拳王阿里
  9. 使用DNSCrypt解决Dropbox污染问题
  10. UWA资源检测与分析支持Unity 5.3!