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 相关文章推荐
CSS3旋转——彩色扇子兼容firefox浏览器
Jun 04 HTML / CSS
css3中新增的样式使用示例附效果图
Aug 19 HTML / CSS
非常漂亮的CSS3百叶窗焦点图动画
Feb 24 HTML / CSS
浅谈css3中的前缀
Jul 20 HTML / CSS
利用css3画个同心圆示例代码
Jul 03 HTML / CSS
浅谈three.js中的needsUpdate的应用
Nov 12 HTML / CSS
html5 CSS过度-webkit-transition使用介绍
Jul 02 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
Mar 01 HTML / CSS
HTML5 Canvas 旋转风车绘制
Aug 18 HTML / CSS
html5如何在Canvas中实现自定义路径动画示例
Sep 18 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
Dec 14 HTML / CSS
用CSS3画一个爱心
Apr 27 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会话处理的10个函数
2015/08/11 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
简单介绍JavaScript数据类型之隐式类型转换
2015/12/28 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
JavaScript输出所选择起始与结束日期的方法
2017/07/12 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
Python实现的文本编辑器功能示例
2017/06/30 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
Mac安装python3的方法步骤
2019/08/09 Python
pytorch 归一化与反归一化实例
2019/12/31 Python
Python基于yield遍历多个可迭代对象
2020/03/12 Python
浅谈TensorFlow中读取图像数据的三种方式
2020/06/30 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
Django基于Models定制Admin后台实现过程解析
2020/11/11 Python
python用分数表示矩阵的方法实例
2021/01/11 Python
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
大码女装:Ulla Popken
2019/08/06 全球购物
教师节促销活动方案
2014/02/14 职场文书
土地租赁意向书
2014/07/30 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
教代会闭幕词
2015/01/28 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
消防隐患整改通知书
2015/04/22 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL