基于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 相关文章推荐
js同时按下两个方向键
Dec 01 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
Jul 22 Javascript
node.js中的fs.realpath方法使用说明
Dec 16 Javascript
用jQuery获取table中行id和td值的实现代码
May 19 Javascript
js获取iframe中的window对象的实现方法
May 20 Javascript
jQuery过滤选择器用法示例
Sep 12 Javascript
基于javascript实现的购物商城商品倒计时实例
Dec 11 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
Feb 23 Javascript
浅谈 Vue v-model指令的实现原理
Jun 08 Javascript
说说node中的可读流和可写流的区别
Jun 01 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
Jul 20 Javascript
JavaScript中交换值的10种方法总结
Aug 18 Javascript
基于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
php将12小时制转换成24小时制的方法
2015/03/31 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
js动态获取时间的方法分析
2019/08/02 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
Python输出汉字字库及将文字转换为图片的方法
2016/06/04 Python
python的Crypto模块实现AES加密实例代码
2018/01/22 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
图解Python中深浅copy(通俗易懂)
2020/09/03 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
英国在线花园中心:You Garden
2018/06/03 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
设计师个人求职信范文
2014/02/02 职场文书
意向协议书范本
2014/04/23 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
司机岗位职责
2015/02/04 职场文书
大学毕业生个人总结
2015/02/28 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python
python中pymysql包操作数据库方法
2022/04/19 Python