基于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 相关文章推荐
扩展javascript的Date方法实现代码(prototype)
Nov 20 Javascript
JavaScript实现仿网易通行证表单验证
May 25 Javascript
zepto中使用swipe.js制作轮播图附swipeUp,swipeDown不起效果问题
Aug 27 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
Mar 31 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
Dec 14 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
Apr 18 Javascript
解决JS外部文件中文注释出现乱码问题
Jul 09 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
Apr 21 Javascript
JavaScript显式数据类型转换详解
Mar 18 Javascript
详解如何给React-Router添加路由页面切换时的过渡动画
Apr 25 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
Jul 31 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实现用户在线时间统计详解
2011/10/08 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
在模板页面的js使用办法
2010/04/01 Javascript
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
Jquery插件编写简明教程
2014/03/25 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
在 Node.js 中使用原生 ES 模块方法解析
2017/09/19 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
微信小程序仿美团城市选择
2018/06/06 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
2019/11/05 Javascript
Python 基础教程之闭包的使用方法
2017/09/29 Python
set在python里的含义和用法
2019/06/24 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
css3 transform及原生js实现鼠标拖动3D立方体旋转
2016/06/20 HTML / CSS
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
c语言常见笔试题总结
2016/09/05 面试题
有针对性的求职自荐信
2013/11/14 职场文书
迟到检讨书5000字
2014/01/31 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
2014年内部审计工作总结
2014/12/09 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
安全教育主题班会教案
2015/08/12 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android