createPattern作用

createPattern() 方法在指定的方向内重复指定的元素。

元素可以是图片、视频,或者其他 <canvas> 元素。

被重复的元素可用于绘制/填充矩形、圆形或线条等等。

网站http://www.w3school.com.cn/tags/canvas_createpattern.asp中基本介绍

语法:

context.createPattern(image,"repeat|repeat-x|repeat-y|no-repeat");

createPattern参数值

参数 描述
image 规定要使用的图片、画布或视频元素。
repeat 默认。该模式在水平和垂直方向重复。
repeat-x 该模式只在水平方向重复。
repeat-y 该模式只在垂直方向重复。
no-repeat 该模式只显示一次(不重复)。

createPattern用法举例

1)使用图片填充

使用到的图片:

repeat的几种方式,大家可以在jsfiddle上修改代码运行看看效果。

也许你觉得这个图标太大了,想让它变得更小更密,所以想改变image的宽高是否能实现这个效果呢?事实是不能,canvas只会将按照原图大小填充。那怎么解决这个问题呢?

这就用到了下面使用canvas填充的方式

2)使用canvas填充

创建一个临时的canvas,用canvas 的drawImg()方法,对图片进行缩放,然后在再把canvas 传到createPattern里面。以此达到createPattern缩放内容的效果。

3)使用视频填充

和图片填充类似,只需要在createpattern使用video标签即可,但是你也会发现绘制的重复内容只是视频的第一帧内容

         var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
var video = document.createElement("video")
video.src = "https://dl.xueleyun.com/files/mp4_3e100520985a66003c1b9a104fd36143.mp4"
video.onloadeddata = function () {
var pat = ctx.createPattern(video, "repeat");
ctx.rect(60, 10, c.width - 20, c.height - 20);
ctx.fillStyle = pat;
ctx.fill();
}

填充位置

另外需要注意的是,在第一个代码实例中,如果我们将矩形的起始坐标x调整下,渲染出来的效果如下图所示。

通过这个效果你应该能清楚,填充的起始位置是画布的原点,并不是要填充图形rect的起始位置。

应用实例

刮涂层赢大奖

前面我们的实例中都是用createpattern填充矩形,如果是填充画线stroke的话也是可以的,下面简单实现一个刮涂层的示例,结合鼠标拖拽绘制线条的代码,效果如下:

canvas createPattern()方法详解的更多相关文章

  1. canvas.drawImage()方法详解

    首先看html5.js /**@param {Element} img_elem@param {Number} dx_or_sx@param {Number} dy_or_sy@param {Numb ...

  2. canvas绘图API详解

    canvas绘图API详解 1.context的状态 矩阵变换属性 当前剪辑区域 context的其他状态属性: strokeStyle, fillStyle, globalAlpha, lineWi ...

  3. Android中Canvas绘图基础详解(附源码下载) (转)

    Android中Canvas绘图基础详解(附源码下载) 原文链接  http://blog.csdn.net/iispring/article/details/49770651   AndroidCa ...

  4. session的使用方法详解

    session的使用方法详解 Session是什么呢?简单来说就是服务器给客户端的一个编号.当一台WWW服务器运行时,可能有若干个用户浏览正在运正在这台服务器上的网站.当每个用户首次与这台WWW服务器 ...

  5. Kooboo CMS - Html.FrontHtml[Helper.cs] 各个方法详解

    下面罗列了方法详解,每一个方法一篇文章. Kooboo CMS - @Html.FrontHtml().HtmlTitle() 详解 Kooboo CMS - Html.FrontHtml.Posit ...

  6. HTTP请求方法详解

    HTTP请求方法详解 请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源]     GET方法用来请求已被URI识别的资源.指定 ...

  7. ecshop后台增加|添加商店设置选项和使用方法详解

    有时候我们想在Ecshop后台做个设置.radio.checkbox 等等来控制页面的显示,看看Ecshop的设计,用到了shop_config这个商店设置功能 Ecshop后台增加|添加商店设置选项 ...

  8. (转)Spring JdbcTemplate 方法详解

    Spring JdbcTemplate方法详解 文章来源:http://blog.csdn.net/dyllove98/article/details/7772463 JdbcTemplate主要提供 ...

  9. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

随机推荐

  1. mybatis的mapper.xml使用parameterType使用的报错

    错误在于一个写的get(Long id)的查询方法, 而在Mapper.xml中我定义了这个接收的参数的类型是int类型, 结果就报了如下的错误 org.mybatis.spring.MyBatisS ...

  2. js 的概念和声明-js 的变量-js 的运算符和逻辑结构-js 的数组

    js 的概念和声明Js的概念和声明:问题:在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效造成用户体验极差解决:使用JavaScript作用:可以让网页和用户之间进行直接简单的 ...

  3. go 语言学习 1

    Go语言命名 Go语言关键字 1.Go语言有25个关键字: 2.关键字用途: var :用于变量的声明const :用于常量的声明type :用于声明类型func :用于声明函数和方法package ...

  4. php 判断两个时间段是否有交集

    一开始,没啥思路,全靠百度,记录一下哈 public function demo(){ //例子 $astart = strtotime("1995-06-16 12:00:00" ...

  5. PHP队列的实现 算法

    <?php /** * php队列算法 * * Create On 2010-6-4 * Author Been * QQ:281443751 * Email:binbin1129@126.co ...

  6. Mac 10.12安装PDF浏览工具Foxit Reader

    说明:永久没费的跨平台PDF浏览工具. 下载: (链接: https://pan.baidu.com/s/1pLEAoXH密码: is5j)

  7. [Xamarin.Android]如何引用JAR檔案 (转帖)

    這個範例是如何在Xamarin.Android中去使用一個我們自行在開發的JAR檔案. 主要會執行的步驟如下 1. 在Xamarin建立一個Android Java Bindings Library ...

  8. Visual Studio 跨平台開發實戰(1) - Hello Xamarin! (转帖)

    前言 應用程式發展的腳步, 從來沒有停過. 從早期的Windows 應用程式, 到網路時代的web 應用程式, 再到近幾年相當盛行的行動裝置應用程式(Mobile Application), 身為C# ...

  9. 2-8 js基础 jsonp封装

    'use strict'; function jsonp(json){ json = json||{} if(!json.url)return; json.data=json.data||{}; js ...

  10. WPF中使用Grid来实现图层的效果

    <Style x:Key="ScanButtonStyle" TargetType="{x:Type Button}"> <!--<Se ...