HTML5 Canvas自定义圆角矩形与虚线(Rounded Rectangle and Dash Line)

简介: HTML5 Canvas自定义圆角矩形与虚线(Rounded Rectangle and Dash Line)

HTML5 Canvas自定义圆角矩形与虚线(RoundedRectangle and Dash Line)


实现向HTML Canvas 2d context绘制对象中添加自定义的函数功能演示,如何绘制虚线


以及控制虚线间隔大小,学会绘制圆角矩形的技巧。


HTML5 Canvas绘制对象中提供的原生功能没有实现绘制圆角矩形与虚线的功能,但是


通过JavaScript语言的Object.prototype可以实现对对象CanvasRenderingContext2D添

加这两个函数功能。代码的演示效果如下:

组件fishcomponent.js的代码如下:

CanvasRenderingContext2D.prototype.roundRect =
  function(x, y, width, height, radius, fill, stroke) {
    if (typeof stroke == "undefined") {
      stroke = true;
    }
    if (typeof radius === "undefined") {
      radius = 5;
    }
    this.beginPath();
    this.moveTo(x + radius, y);
    this.lineTo(x + width - radius, y);
    this.quadraticCurveTo(x + width, y, x + width, y + radius);
    this.lineTo(x + width, y + height - radius);
    this.quadraticCurveTo(x + width, y + height, x + width - radius, y+ height);
    this.lineTo(x + radius, y + height);
    this.quadraticCurveTo(x, y + height, x, y + height - radius);
    this.lineTo(x, y + radius);
    this.quadraticCurveTo(x, y, x + radius, y);
    this.closePath();
    if (stroke) {
      this.stroke();
    }
    if (fill) {
      this.fill();
    }
};
 
CanvasRenderingContext2D.prototype.dashedLineTo = function (fromX, fromY, toX, toY, pattern) {
  // default interval distance -> 5px
  if (typeof pattern === "undefined") {
    pattern = 5;
  }
 
  // calculate the delta x and delta y
  var dx = (toX - fromX);
  var dy = (toY - fromY);
  var distance = Math.floor(Math.sqrt(dx*dx + dy*dy));
  var dashlineInteveral = (pattern <= 0) ? distance : (distance/pattern);
  var deltay = (dy/distance) * pattern;
  var deltax = (dx/distance) * pattern;
  
  // draw dash line
  this.beginPath();
  for(var dl=0; dl<dashlineInteveral; dl++) {
    if(dl%2) {
      this.lineTo(fromX + dl*deltax, fromY + dl*deltay);
    } else {            
      this.moveTo(fromX + dl*deltax, fromY + dl*deltay);            
    }         
  }
  this.stroke();
};

HTML中调用演示:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="chrome=IE8">
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>Canvas Rounded Rectangle Demo</title>
<script src="fishcomponent.js"></script>
<link href="default.css" rel="stylesheet" />
  <script>
    var ctx = null; // global variable 2d context
    var imageTexture = null;
    window.onload = function() {
      var canvas = document.getElementById("text_canvas");
      console.log(canvas.parentNode.clientWidth);
      canvas.width = canvas.parentNode.clientWidth;
      canvas.height = canvas.parentNode.clientHeight;
      
      if (!canvas.getContext) {
          console.log("Canvas not supported. Please install a HTML5 compatible browser.");
          return;
      }
      var context = canvas.getContext('2d');
      context.strokeStyle="red";
      context.fillStyle="RGBA(100,255,100, 0.5)";
      context.roundRect(50, 50, 150, 150, 5, true);
      context.strokeStyle="blue";               
      for(var i=0; i<10; i++) {
        var delta = i*20;
        var pattern = i*2+1;
        context.dashedLineTo(250, 50+delta, 550, 50+delta, pattern);
      }
    }
  </script>
</head>
<body>
  <h1>HTML5 Canvas Dash-line Demo - By Gloomy Fish</h1>
  <pre>Dash line and Rounded Rectangle</pre>
  <div id="box_plot">
    <canvas id="text_canvas"></canvas>
  </div>
</body>
</html>

转载请注明

相关文章
|
17天前
|
移动开发 前端开发 JavaScript
纯HTML5 Canvas实现的饼图
纯HTML5 Canvas实现的饼图
17 6
|
17天前
|
移动开发 前端开发 HTML5
HTML5 Canvas阴影用法演示
HTML5 Canvas阴影用法演示
33 4
|
17天前
|
移动开发 前端开发 HTML5
HTML5 Canvas中实现绘制一个像素宽的细线
HTML5 Canvas中实现绘制一个像素宽的细线
16 3
|
17天前
|
移动开发 前端开发 JavaScript
HTML5 Canvas实现360度全景图
HTML5 Canvas实现360度全景图
11 1
|
17天前
|
移动开发 前端开发 JavaScript
浏览器端图表渲染技术SVG, VML HTML Canvas
浏览器端图表渲染技术SVG, VML HTML Canvas
12 0
|
2天前
|
前端开发
HTML+CSS练习小项目——百叶窗
HTML+CSS练习小项目——百叶窗
|
1天前
|
XML 前端开发 JavaScript
HTML、CSS、JavaScript有什么区别
HTML、CSS、JavaScript有什么区别
|
6天前
|
编解码 前端开发
编写代码中常见问题汇总(html和css)
text-indent用于首行缩进,line-height与height相同实现垂直居中;vertical-align:middle用于行内元素居中;text-align:center做水平居中;list-style:none清除列表符号;overflow:hidden隐藏溢出;background-repeat:no-repeat阻止平铺;float:left实现横排;相对定位父元素,绝对定位子元素;box-sizing调整盒子模型;用边框或overflow解决盒子塌陷;
25 5
|
10天前
|
缓存 移动开发 前端开发
在PWA的开发中,HTML与CSS作为前端技术的基础,发挥着至关重要的作用
【6月更文挑战第14天】PWA(渐进式网页应用)借助HTML和CSS,提供接近原生应用的体验。HTML构建页面结构和内容,响应式设计适应各种设备,语义化标签提升可访问性,Manifest文件配置应用元数据,离线页面保证无网时体验。CSS则用于定制主题样式,创建动画效果,实现响应式布局,并管理字体和图标。两者协同工作,确保PWA在不同环境下的优秀性能和用户体验。随着前端技术进步,HTML与CSS在PWA中的应用将更加深入。
22 2
|
9天前
|
XML 前端开发 JavaScript
前端简介(HTML+CSS+JS)
前端简介(HTML+CSS+JS)