前言

好久没写博客了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. linux专业术语中英文,Linux专业术语中英文对照.doc
  2. Matlab实用程序--图形应用-图形的隐藏属性
  3. linux deepin20.5配置WebStorm桌面快捷方式:webstorm.desktop
  4. Dubbo对于REST协议的支持
  5. 技术分享|手机推送原理剖析指南
  6. 3.改变 HTML 内容
  7. Oracle_spatial的函数介绍
  8. python dataframe函数_python pandas中DataFrame类型数据操作函数的方法
  9. 魔百盒配置服务器信息,移动魔百盒网络设置方法
  10. 用c#转换word或excel文档为html文件,C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例...
  11. 1018. Binary Prefix Divisible By 5可被 5 整除的二进制前缀
  12. 测试用例编写八大要素
  13. 2020高中计算机会考成绩查询,2020年高中会考成绩查询入口
  14. 逆水寒2021最新服务器,逆水寒公布2021部分更新计划,写满了离经叛道
  15. 【AcWing19】【LeetCode】DFS - 46/47/39/77/78/216/17/131/93/90/491
  16. 微软媒体服务器,Azure 媒体服务概述
  17. 流量分类方法设计(一)——参考论文整理
  18. 加密工具GPG入门教程
  19. win7变成xp风格了怎么改回_win7桌面怎么改成xp风格|win7桌面改成xp风格的方法
  20. jupyter中配置多种虚拟环境

热门文章

  1. django中实现mp3转wav(使用ffmpeg)
  2. 36种简便、有效的记忆方法(摘抄)
  3. 我在杭州实习的这些天
  4. 松柏先生:电商的这六道死穴不解开,就等死吧!
  5. Android Studio购买售卖系统
  6. Python 2.7.15 初学者模拟双扣扑双扣升级随机发牌
  7. mysql新闻发布_基于PHP+mysql实现新闻发布系统的开发
  8. windows屏幕分享方案
  9. ChatGPT背后:从0到1,OpenAI的创立之路
  10. fscanf()函数基本用法