canvas 橡皮筋式线条绘图应用方法


Posted in HTML / CSS onFebruary 13, 2019

什么叫橡皮筋式

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

例子如下:point_down:

canvas 橡皮筋式线条绘图应用方法

思路

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

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

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

mouseup:drag恢复为false

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

canvas 橡皮筋式线条绘图应用方法

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

代码

<canvas id="canvas" width="600" height="400" style="border: 1px solid black;"> </canvas>
    <script type="text/javascript">
        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
          }       
        }    

    </script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
html5 css3 动态气泡按钮实例演示
Dec 02 HTML / CSS
CSS3——齿轮转动关键代码
May 02 HTML / CSS
用纯css3实现的图片放大镜特效效果非常不错
Sep 02 HTML / CSS
实例教程 纯CSS3打造非常炫的加载动画效果
Nov 05 HTML / CSS
CSS超出文本指定宽度用省略号代替和文本不换行
May 05 HTML / CSS
微信浏览器左上角返回按钮拦截功能
Nov 21 HTML / CSS
HTML5 Web Database 数据库的SQL语句的使用方法
Dec 09 HTML / CSS
html特殊符号示例 html特殊字符编码对照表
Jan 14 HTML / CSS
HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
May 07 HTML / CSS
10个最常见的HTML5面试题 附答案
Jun 06 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
Aug 06 HTML / CSS
html5跳转小程序wx-open-launch-weapp踩坑
Dec 02 HTML / CSS
Canvas系列之滤镜效果
Feb 12 #HTML / CSS
canvas学习总结三之绘制路径-线段
Jan 31 #HTML / CSS
移动端Html5中百度地图的点击事件
Jan 31 #HTML / CSS
Html5页面内使用JSON动画的实现
Jan 29 #HTML / CSS
HTML5拍照和摄像机功能实战详解
Jan 24 #HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
Jan 24 #HTML / CSS
详解canvas绘制多张图的排列顺序问题
Jan 21 #HTML / CSS
You might like
PHP文本数据库的搜索方法
2006/10/09 PHP
生成sessionid和随机密码的例子
2006/10/09 PHP
laravel安装和配置教程
2014/10/29 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
PHP 芝麻信用接入的注意事项
2016/12/01 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
将查询条件的input、select清空
2014/01/14 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
Python 基础知识之字符串处理
2017/01/06 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
Python pandas如何向excel添加数据
2020/05/22 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
2020/11/28 Python
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
护士自我鉴定范文
2013/10/06 职场文书
中职生自荐信
2013/10/13 职场文书
中英双版中文教师求职信
2013/10/27 职场文书
对孩子的寄语
2014/04/09 职场文书
给校长的建议书200字
2014/05/16 职场文书
蛋糕店创业计划书范文
2014/09/21 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
毕业生党员个人总结
2015/02/14 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android