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>

转载请注明

相关文章
|
20天前
|
Web App开发 移动开发 前端开发
html5 canvas五彩碎纸屑飘落动画特效
h5 canvas飘落纸片动画是一款实现五彩纸屑飘落的背景动画特效,基于canvas绘制的空中飘落的纸屑片动画特效,适用于网页动态背景效果代码。简单使用,欢迎下载!代码适用浏览器:搜狗、360、FireFox(建议)、Chrome、Safari、Opera、傲游、世界之窗,是一款不错的的特效插件,希望大家喜欢!
35 5
|
1月前
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
39 1
利用html2canvas插件自定义生成名片信息并保存图片
|
1月前
|
前端开发
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
26 0
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
|
1月前
|
移动开发 前端开发 HTML5
HTML5 Canvas制作的粒子十秒倒计时源码
一段基于HTML5 Canvas制作的粒子爆炸,十秒数字倒计时,全屏倒计时动画效果,给人一种非常大气的视觉感
34 0
HTML5 Canvas制作的粒子十秒倒计时源码
|
1月前
|
前端开发 JavaScript
Canvas三维变化背景动画HTML源码
Canvas三维变化背景动画HTML源码
34 5
|
3月前
|
XML 移动开发 前端开发
HTML5 SVG和canvas的性能探讨
HTML5 中的 SVG(可缩放矢量图形)和 Canvas(画布)分别用于网页图形绘制。SVG 基于矢量图形,使用 XML 描述,适合静态或少量动态内容(如图标、图表),易于编辑且保持高分辨率;Canvas 则基于位图,通过 JavaScript 绘制,更适合快速更新大量图形的场景(如游戏、动态动画),但在复杂图形计算时可能遇到性能瓶颈。总体而言,SVG 适用于静态和少量动态内容,而 Canvas 更适合高频率更新和性能要求高的场景。
|
3月前
|
移动开发 前端开发 数据挖掘
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
|
1天前
一个好看的小时钟html+js+css源码
一个好看的小时钟html+js+css源码
64 24
|
1月前
|
前端开发 测试技术 定位技术
如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤
本文深入介绍了如何利用HTML和CSS构建企业级网站的全过程。从项目概述到页面结构设计,再到HTML结构搭建与CSS样式设计,最后实现具体页面并进行优化提升,全面覆盖了网站开发的关键步骤。通过实例展示了主页、关于我们、产品展示、新闻动态及联系我们等页面的设计与实现,强调了合理布局、美观设计及用户体验的重要性。旨在为企业打造一个既专业又具吸引力的线上平台。
59 7