前言

好久没写博客了QUQ 记得上次写博客还是上次

<script>let isActive = false; //是否弃用let divContainer = document.getElementById("divContainer"); //生成的父级容器let drawingCanvas; //绘制的canvaslet drawingContext; //绘制的canvas2dlet isDrawing = false; //是否正在拖动let drewPoints = []; //画线的点function activate() {console.log(123)if (!isActive) {isActive = true;if (!document.getElementById("lasso")) {// 创建lasso的画布initDOM('canvas', 'lasso');drawingContext = drawingCanvas.getContext('2d');drawingCanvas.style.cursor = 'cursor';}}// 监听鼠标点击事件drawingCanvas.addEventListener("mousedown", (e) => {onDrawingStart(e)})// 监听鼠标移动事件drawingCanvas.addEventListener("mousemove", (e) => {onDrawing(e)})// 监听鼠标抬起事件drawingCanvas.addEventListener("mouseup", (e) => {onDrawingEnd(e)})}function initDOM(tag, id) {// 创建dom对象let dom = document.createElement(tag);// 添加styledom.style.position = 'absolute';dom.style.left = "0px";dom.style.top = "0px";dom.id = id;dom.style.backgroundColor = "rgba(245,245,245,1.0)"let width = "1000";let height = "500";// 设置宽高if (window.devicePixelRatio) {dom.style.width = width + "px";dom.style.height = height + "px";dom.height = height * window.devicePixelRatio;dom.width = width * window.devicePixelRatio;}divContainer.appendChild(dom);drawingCanvas = dom;}/*** 鼠标点击* @param event*/function onDrawingStart(event) {let drawingRectangle = drawingCanvas.getBoundingClientRect();// 开始绘制if (isActive) {isDrawing = true;drewPoints = [];selectedNodes = [];drewPoints.push({x: event.clientX - drawingRectangle.left,y: event.clientY - drawingRectangle.top});// 改变鼠标形状drawingCanvas.style.cursor = 'cell';// 阻止默认事件发生event.stopPropagation();}}/*** 鼠标拖动* @param event*/function onDrawing(event) {// 绘制线if (isActive && isDrawing) {let x = 0,y = 0,drawingRectangle = drawingCanvas.getBoundingClientRect();x = event.clientX;y = event.clientY;drewPoints.push({x: x - drawingRectangle.left,y: y - drawingRectangle.top});// 生成绘制的属性drawingContext.lineWidth = 2;drawingContext.strokeStyle = 'rgba(57,207,255,1.0)';drawingContext.fillStyle = 'rgba(224, 245, 255, 0.25)';drawingContext.lineJoin = 'round';drawingContext.lineCap = 'round';// 清空画布drawingContext.clearRect(0, 0, drawingContext.canvas.width, drawingContext.canvas.height);let sourcePoint = drewPoints[0],destinationPoint = drewPoints[1],pointsLength = drewPoints.length,// 获取绘制的曲线的控制点getMiddlePointCoordinates = function (firstPoint, secondPoint) {return {x: firstPoint.x + (secondPoint.x - firstPoint.x) / 2,y: firstPoint.y + (secondPoint.y - firstPoint.y) / 2};};// 开始绘制drawingContext.beginPath();drawingContext.moveTo(sourcePoint.x, sourcePoint.y);for (let i = 1; i < pointsLength; i++) {let middlePoint = getMiddlePointCoordinates(sourcePoint, destinationPoint);// 绘制贝赛尔曲线drawingContext.quadraticCurveTo(sourcePoint.x, sourcePoint.y, middlePoint.x, middlePoint.y);sourcePoint = drewPoints[i];destinationPoint = drewPoints[i + 1];}drawingContext.lineTo(sourcePoint.x, sourcePoint.y);drawingContext.stroke();// 填充drawingContext.fill();// 阻止默认事件发生event.stopPropagation();}}/*** 鼠标松开* @param e*/function onDrawingEnd(e) {if (isActive && isDrawing) {isDrawing = false;drawingContext.clearRect(0, 0, drawingCanvas.width, drawingCanvas.height);drawingCanvas.style.cursor = 'default';e.stopPropagation();}}activate()</script>

Canvas画布实现套索的效果相关推荐

  1. 用Canvas画布展示出3D效果的网页源码

    大家好,今天给大家介绍一款,用Canvas画布展示出3D效果的网页源码(图1).送给大家哦,获取方式在本文末尾. 图1 每次点击页面中间的卡片,就会触发3d旋转特效(图2) 图2 源码预览, < ...

  2. s时钟画布 android,Canvas画布实现自定义时钟效果

    标题 *{margin:0; padding:0; list-style:none;} .box{ width: 420px; height: 420px; margin: 50px auto 0; ...

  3. 刮刮乐html5效果擦除,利用HTML5的画布Canvas实现刮刮卡效果

    先给大家展示效果: 你玩过刮刮卡么?一不小心可以中奖的那种.今天我给大家分享一个基于HTML5技术实现的刮刮卡效果,在PC上只需按住鼠标,在手机上你只需按住指头,轻轻刮去图层就可以模拟真实的刮奖效果. ...

  4. 更新——Canvas画布动画效果之实现倒计时

    Hello,大家好! 小W复活啦!继续欢乐的给大家更博,输送新知识~~ 不开玩笑啦!秒进正题~~~ 上次更博,小W给大家介绍了Canvas画布的基础部分,以及实现了一个由7*10点阵图显示的倒计时的基 ...

  5. HTML用画布实现刮刮卡,利用HTML5的画布Canvas实现刮刮卡效果_javascript技巧

    先给大家展示效果: 你玩过刮刮卡么?一不小心可以中奖的那种.今天我给大家分享一个基于HTML5技术实现的刮刮卡效果,在PC上只需按住鼠标,在手机上你只需按住指头,轻轻刮去图层就可以模拟真实的刮奖效果. ...

  6. html5 图片弹跳,html5 canvas画布里面圆球弹跳动画效果代码

    特效描述:html5 canvas 画布 圆球弹跳动画.html5 跳动的球体 代码结构 1. HTML代码 Untitled Document body { margin: 0px; } var i ...

  7. js实现图片虚化_js canvas画布实现高斯模糊效果

    最近项目中有一个需求是实现图片的局部模糊效果,看上去一个挺难的效果.在实现局部模糊效果前,首先能够实现全部模糊.经过和度娘的一番较劲后,找到了一个不错的案例,然后在他的基础上,经过一番修改,和备注,实 ...

  8. 用html5的canvas画布绘制贝塞尔曲线

    查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  9. js将文字填充与canvas画布再转为图片

    需求:封装consul服务的webUI: 原因:展示consul的服务信息时,需要嵌套动画,由于其没有内置的icon,所以将服务name放于图片位: 分析:展示信息时采用了卡片式的服务布局,缩放式的服 ...

最新文章

  1. android 中 webview 怎么用 localStorage?
  2. 防盗链测试01 - Jwplayer+Tengine2.3.1 mp4模块打造流媒体测试服务器
  3. 通过随机数生成兑换码和概率生成随机数
  4. arduinohanshu_Arduino 常用函数参考文档
  5. 使用Spring Cloud休息客户电话
  6. 飞畅 Profibus总线光纤中继器产品介绍
  7. Wincc V7.3SE安装截图
  8. 机器学习笔记——深度学习入门篇
  9. java编程int和byte的用法_Java中的Byte Array和Int转换
  10. 熟悉MyEclipse
  11. Java 并发编程阅读笔记
  12. 微信公号“架构师之路”学习笔记(四)-分布式ID生成算法(应用场景、uuid/guid、snowflake算法)
  13. matlab遗传算法求解TSP旅行商问题
  14. php条形码宽度,PHP条形码生成封装类
  15. 手机、电脑录制内部声音的方法
  16. 三国志战略版:Daniel_平民掐大佬之《兵法九章》
  17. 开关电源设计实例之Boost 篇
  18. screenX、clientX、pageX三者间的区别
  19. Fluent Mybatis 牛逼
  20. 我的世界服务器无限刷雪傀儡,《我的世界》四个刷怪技巧,雪傀儡的雪球用来对付烈焰人有奇效?...

热门文章

  1. 『忘了再学』Shell基础 — 19、使用declare命令声明变量类型
  2. 软件创新实验室:微信小程序开发——开发框架介绍
  3. 信息学奥赛一本通 1185 单词排序
  4. source insight破解问题汇总与解决
  5. RNSS与RDSS的集成
  6. AcWing 342. 道路与航线 (连通块Dijkstra+拓扑序||spfa+slf优化)
  7. php网站鼠标美化,网页美化小神器
  8. iOS 防止抓包(SSL Pinning)
  9. 微型计算机多少瓦,微型计算机能效限定值及能效等级 GB28380-2012
  10. CRM源码­|CRM系统源码开发