基于JavaScript canvas绘制贝塞尔曲线


Posted in Javascript onDecember 25, 2018

简单描述:页面上有四个点,鼠标拖动四个点的位置来改变贝塞尔曲线的形状,双击放置点位

效果图:

基于JavaScript canvas绘制贝塞尔曲线

基于JavaScript canvas绘制贝塞尔曲线

基于JavaScript canvas绘制贝塞尔曲线

代码:

<!DOCTYPE html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
   html{overflow: hidden;}
   * {padding: 0;margin: 0;}
   #box {background-color: #000000;}
   .point {
    width: 20px;
    height: 20px;
    background-color: #fff;
    border-radius: 50%;
    position: absolute;
    left: 100px;
    top:200px;
    text-align: center;
    line-height: 20px;
   }
  </style>
 </head>
 <body>
  <canvas id="box"></canvas>

  <div class="point startPoint">b</div>
  <div class="point endPoint">e</div>
  <div class="point point1">1</div>
  <div class="point point2">2</div>
 <script src="js/max.js"></script>
 </body>
</html>

js:

/**
 * Created by Administrator on 2017/8/11.
 * js/max.js
 */
(function () {
 var curEle = null;
 var startPointView = document.querySelector(".startPoint");
 var endPointPointView = document.querySelector(".endPoint");
 var point1View = document.querySelector(".point1");
 var point2View = document.querySelector(".point2");
 var context = null;
 function init() {
  var canvasEle = document.querySelector("#box");
  canvasEle.width = innerWidth;
  canvasEle.height = innerHeight;
  //实时监听网页大小
  window.onresize = function () {
   canvasEle.width = innerWidth;
   canvasEle.height = innerHeight;
  };
  context = canvasEle.getContext("2d");

  context.strokeStyle = "white";
  context.lineWidth = 10;
  //贝塞尔曲线简单用法
  context.beginPath();
  context.moveTo(300,300);
  context.bezierCurveTo(500,200,600,250,600,600);
  context.stroke();
  //循环获取四个点的数组
  for(var i=0;i<4;i++){
  addEvent([startPointView,endPointPointView,point1View,point2View][i]);
  }
  //鼠标双击移除鼠标滑动事件 放下拖动的点
  document.ondblclick = function () {
   document.removeEventListener("mousemove",move);
  };
 }
 //鼠标按下拖动
 function addEvent(ele) {
  ele.onmousedown = function () {
   curEle = this;
   document.addEventListener("mousemove",move);
  };
 }
 //获取拖动位置并绘制贝塞尔曲线
 function move(event) {
  curEle.style.left = event.pageX+"px";
  curEle.style.top = event.pageY+"px";
  context.clearRect(0,0,innerWidth,innerHeight);
  context.beginPath();
  context.moveTo(getLeft(startPointView),getTop(startPointView));
  context.bezierCurveTo(getLeft(point1View),getTop(point1View),getLeft(point2View),getTop(point2View),getLeft(endPointPointView),getTop(endPointPointView));
  context.stroke();
 }
 function getLeft(ele) {
  return parseInt(ele.style.left);
 }
 function getTop(ele) {
  return parseInt(ele.style.top);
 }
 init();
})();

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

Javascript 相关文章推荐
jQuery-onload让第一次页面加载时图片是淡入方式显示
May 23 Javascript
js中函数调用的两种常用方法使用介绍
Jul 17 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
May 25 Javascript
有关jquery与DOM节点操作方法和属性记录
Apr 15 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
Jul 06 Javascript
web 前端常用组件之Layer弹出层组件
Sep 22 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 Javascript
对layui中表单元素的使用详解
Aug 15 Javascript
js取0-9随机取4个数不重复的数字代码实例
Mar 27 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
Mar 02 Javascript
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
基于js Canvas实现二次贝塞尔曲线
Dec 25 #Javascript
JavaScript实现小球沿正弦曲线运动
Sep 07 #Javascript
微信小程序使用二次贝塞尔曲线画波浪
Dec 25 #Javascript
微信小程序开发问题之wx.previewImage
Dec 25 #Javascript
微信小程序使用for循环动态渲染页面操作示例
Dec 25 #Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 #Javascript
使用gulp构建前端自动化的方法示例
Dec 25 #Javascript
You might like
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
PHP中文编码小技巧
2014/12/25 PHP
PHP中使用curl入门教程
2015/07/02 PHP
php递归实现无限分类的方法
2015/07/28 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
Javascript笔记一 js以及json基础使用说明
2010/05/22 Javascript
javascript为下拉列表动态添加数据项
2014/05/23 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
微信小程序canvas截取任意形状的实现代码
2020/01/13 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python中字典的基础知识归纳小结
2015/08/19 Python
基于python的字节编译详解
2017/09/20 Python
tensorflow更改变量的值实例
2018/07/30 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
python各类经纬度转换的实例代码
2019/08/08 Python
tensorflow如何批量读取图片
2019/08/29 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
通过实例解析python and和or使用方法
2020/11/14 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
数据管理员的自我评价分享
2013/11/15 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
《爱如茉莉》教后反思
2014/04/12 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS