HTML5(六)preserve and recover

2023-10-28

HTML5(六)preserve and recover

1. save the state of canvas context
2. So we have two method to save and restore the state of Context
save()
restore()

it works like stack.

3. magic change

translate(dx,dy)
change the (0,0) point from the original (0,0), the original point (x,y) will be
x'=x+dx
y'=y+dy
eg:ctx.translate(5,8)

scale(sx,sy)
sx,sy is the enlarge and reduce factor, the original point(x,y) will be
x' = x * sx
y' = y * sy

rotate(a)
angle, the original point(x,y) will be
x'=x cosA - y sinA
y'=x sinA + y cosA

transform(m11,m12,m21,m22,dx,dy)
m11 m21 dx
m12 m22 dy
0 0 1
translate(dx,dy):equal transform(1,0,0,1,dx,dy)
scale(sx,xy):equal transform(sx,0,0,sy,0,0)
rotate(A):equal transform(cosA,sinA,-sinA,cosA,0,0)

4. Group
Group is the situation that one picture in over another picture.
ctx.globalCompositeOperation = type
There are 12 types:
source-over
source-in
source-out

5. Clip
my sample file test6.html:
<canvas id="canvas1" width="250" height="300"
οnmοusedοwn="trans.transform(event);"
οnmοuseup="trans.init(event);"
οnmοusemοve="trans.translate(event);"
style="background-color:black">
you are out!
</canvas>

<br/>
<input type="radio" name="r" id="r1" checked="checked">Move<br />
<input type="radio" name="r" id="r2">Large&Small<br />
<input type="radio" name="r" id="r3">Circle<br />
<input type="radio" name="r" id="r4">Large&Small&Circle<br />

<canvas id="canvas3" width="250" height="300" style="background-color:black">
You are out!
</canvas><br/>
<input type="button" οnclick="move(1);" value="Move1">
<input type="button" οnclick="move(2);" value="Move2">
<input type="button" οnclick="stop();" value="Stop"><br />
<div>
<table>
<tr>
<td><canvas id="tut0" width="125" height="125"></canvas><br/><label id="lab0"></label></td>
<td><canvas id="tut1" width="125" height="125"></canvas><br/><label id="lab1"></label></td>
<td><canvas id="tut2" width="125" height="125"></canvas><br/><label id="lab2"></label></td>
<td><canvas id="tut3" width="125" height="125"></canvas><br/><label id="lab3"></label></td>
</tr>
<tr>
<td><canvas id="tut4" width="125" height="125"></canvas><br/><label id="lab4"></label></td>
<td><canvas id="tut5" width="125" height="125"></canvas><br/><label id="lab5"></label></td>
<td><canvas id="tut6" width="125" height="125"></canvas><br/><label id="lab6"></label></td>
<td><canvas id="tut7" width="125" height="125"></canvas><br/><label id="lab7"></label></td>
</tr>
<tr>
<td><canvas id="tut8" width="125" height="125"></canvas><br/><label id="lab8"></label></td>
<td><canvas id="tut9" width="125" height="125"></canvas><br/><label id="lab9"></label></td>
<td><canvas id="tut10" width="125" height="125"></canvas><br/><label id="lab10"></label></td>
<td><canvas id="tut11" width="125" height="125"></canvas><br/><label id="lab11"></label></td>
</tr>
</table>
</div>

<script type="text/javascript">
IMG_SRC='data:image/gif;base64,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';

//==========================================
//trans class
//==========================================
function Transform(){
this.ctx = document.getElementById("canvas1").getContext("2d");
this.img=new Image();
this.img.src=IMG_SRC;
this.interval = null;
// mouse satus
this.pressed=false;
this.init();
}

//init picture
Transform.prototype.init=function(){
//mouse status
this.pressed=false;
//stop timer
if(this.interval){
clearInterval(this.interval);
}
//changing value
this.delta = 0.06;
//clear
this.ctx.clearRect(0,0,250,300);
//paint
this.paint();
}

//paint
Transform.prototype.paint=function(){
var that=this;
var img=this.img
if(img.complete)
that.ctx.drawImage(img,0,0);
else
var interval = setInterval(function(){
if(img.complete){
that.ctx.drawImage(img,0,0);
clearInterval(interval);
}
},300);
}

//press, begin changing
Transform.prototype.transform = function(){
//get the point
this.dx=event.offsetX;
this.dy=event.offsetY;
//get the point
this.startx=event.offsetX;
this.starty=event.offsetY;
//scale
this.sc=1;
//circle
this.angle=0;

var that=this;
if(document.getElementById("r1").checked)
this.pressed=true;
else if(document.getElementById("r2").checked)
this.interval = setInterval(function(){that.scale()},50);
else if((document.getElementById("r3").checked))
this.interval = setInterval(function(){that.rotate()},50);
else
this.interval = setInterval(function(){that.scaleAndRotate()},50);
}

//move
Transform.prototype.translate = function(){
this.ddx=event.offsetX-this.startx;
this.ddy=event.offsetY-this.starty;
if(this.pressed){
//clear
this.ctx.clearRect(0,0,250,300);
//save state
this.ctx.save();
//move
this.ctx.translate(this.ddx,this.ddy);
this.paint();
this.ctx.fillStyle="red";
this.ctx.fillRect(this.dx-5,this.dy-5,10,10);
//restore
this.ctx.restore();
}
}

//small & large
Transform.prototype.scale = function(){
this.ctx.clearRect(0,0,250,300);
this.sc=this.sc - this.delta;
if(this.sc<0.2 || this.sc>2)
this.delta = -this.delta;
this.ctx.save();
//from (dx,dy) (sx,sy):transform(sx, 0, 0, sy, dx(1-sx), dy(1-sy))
this.ctx.transform(this.sc, 0, 0, this.sc, this.dx*(1-this.sc), this.dy*(1-this.sc))
this.paint();
this.ctx.fillStyle="red";
this.ctx.fillRect(this.dx-5,this.dy-5,10,10);
this.ctx.restore();
}

//circle
Transform.prototype.rotate = function(){
this.ctx.clearRect(0,0,250,300);
var PI = Math.PI;
this.angle=this.angle + PI/60;
this.ctx.save();
//from (dx,dy) circle A:transform(cosA, sinA, -sinA, cosA, dx(1-cosA) + dysinA, dy(1-cosA) - dxsinA)
this.ctx.transform(Math.cos(this.angle), Math.sin(this.angle),
-Math.sin(this.angle), Math.cos(this.angle),
this.dx*(1-Math.cos(this.angle)) + this.dy*Math.sin(this.angle),
this.dy*(1-Math.cos(this.angle)) - this.dx*Math.sin(this.angle))
this.paint();
this.ctx.fillStyle="red";
this.ctx.fillRect(this.dx-5,this.dy-5,10,10);
this.ctx.restore();
}

//Circle and large small
Transform.prototype.scaleAndRotate = function(){
this.ctx.clearRect(0,0,250,300);
this.sc=this.sc - this.delta;
if(this.sc<0.2 || this.sc>2)
this.delta = -this.delta;
var PI = Math.PI;
this.angle=this.angle + PI/60;
this.ctx.save();
this.ctx.translate(this.dx,this.dy);
this.ctx.scale(this.sc,this.sc);
this.ctx.rotate(this.angle);
this.ctx.translate(-this.dx,-this.dy);
this.paint();
this.ctx.fillStyle="red";
this.ctx.fillRect(this.dx-5,this.dy-5,10,10);
this.ctx.restore();
}

var trans = new Transform();

//==========================================
function Clip(){
var canvas = document.getElementById("canvas3");
this.ctx = canvas.getContext("2d");
this.img=new Image();
this.img.src=IMG_SRC;
//move direct
this.delta=[3,3];
//begin point
this.pos_x = 225;
this.pos_y = 120;
//circle
this.radius = 40;
this.w = parseInt(canvas.getAttribute("width"));
this.h = parseInt(canvas.getAttribute("height"));
}

Clip.prototype.draw1=function(){
//crach check
if (this.pos_x < this.radius) {
this.delta[0] = Math.random() % 4 + 5;
} else if (this.pos_x > this.w - this.radius) {
this.delta[0] = -(Math.random() % 4 + 5);
}
if (this.pos_y < this.radius) {
this.delta[1] = Math.random() % 4 + 5;
} else if (this.pos_y > this.h - this.radius) {
this.delta[1] = -(Math.random() % 4 + 5);
}
this.pos_x += this.delta[0];
this.pos_y += this.delta[1];
this.ctx.clearRect(0, 0, this.w, this.h);
this.ctx.save()
this.ctx.translate(this.pos_x,this.pos_y);
this.ctx.beginPath();
this.ctx.arc(0 ,0,this.radius,0,Math.PI*2,true);
this.ctx.clip();
this.ctx.drawImage(this.img, -this.pos_x, -this.pos_y,this.w, this.h);
this.ctx.restore();
}

Clip.prototype.draw2=function(){
if (this.pos_x < this.radius) {
this.delta[0] = Math.random() % 4 + 5;
} else if (this.pos_x > this.w - this.radius) {
this.delta[0] = -(Math.random() % 4 + 5);
}
if (this.pos_y < this.radius) {
this.delta[1] = Math.random() % 4 + 5;
} else if (this.pos_y > this.h - this.radius) {
this.delta[1] = -(Math.random() % 4 + 5);
}
this.pos_x += this.delta[0];
this.pos_y += this.delta[1];

this.ctx.clearRect(0, 0, this.w, this.h);
this.ctx.fillStyle="rgba(125,125,125,0.1)"
this.ctx.fillRect(0, 0, this.w, this.h);
this.ctx.save()
this.ctx.translate(this.pos_x,this.pos_y);
this.ctx.globalCompositeOperation = "xor";
this.ctx.fillStyle="white"
this.ctx.beginPath();
this.ctx.arc(0 ,0,this.radius,0,Math.PI*2,true);
this.ctx.fill();
this.ctx.globalCompositeOperation = "destination-over";
this.ctx.drawImage(this.img, -this.pos_x, -this.pos_y,this.w, this.h);
this.ctx.restore();
}

var cl=new Clip();
cl.interval=null;

function move(id){
if(cl.interval)
clearInterval(cl.interval)
if(id==1){
cl.ctx.clearRect(0, 0, 450, 300);
cl.interval=setInterval(function(){cl.draw1()},20);
}
else{
cl.ctx.clearRect(0, 0, 450, 300);
cl.interval=setInterval(function(){cl.draw2()},20);
}
}

function stop(){
clearInterval(cl.interval)
}

var compositeTypes = [
'source-over','source-in','source-out','source-atop',
'destination-over','destination-in','destination-out','destination-atop',
'lighter','darker','copy','xor'
];
function drawComp(){
for (i=0;i<compositeTypes.length;i++){
var label = document.createTextNode(compositeTypes[i]);
document.getElementById('lab'+i).appendChild(label);
var ctx = document.getElementById('tut'+i).getContext('2d');

// draw rectangle
ctx.fillStyle = "#09f";
ctx.fillRect(15,15,70,70);

// set composite property
ctx.globalCompositeOperation = compositeTypes[i];

// draw circle
ctx.fillStyle = "#f30";
ctx.beginPath();
ctx.arc(75,75,35,0,Math.PI*2,true);
ctx.fill();
}
}
drawComp();
</script>

references:
http://www.blogjava.net/myqiao/category/46360.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5(六)preserve and recover 的相关文章

  • 创意无限,绘图轻松——Sketch for Mac矢量绘图软件全面介绍

    在现代设计领域 矢量绘图软件是设计师们必不可少的工具之一 而在众多矢量绘图软件中 Sketch for Mac凭借其强大的功能和友好的用户界面脱颖而出 成为众多设计师的首选 Sketch for Mac是一款专为Mac用户开发的矢量绘图软件
  • C 原型范围

    我了解到 声明的类型说明符 参数列表中的标识符 函数原型中的声明 不是函数定义的一部分 标识符具有函数原型 范围 终止于 函数声明符 请参阅下面提到的C 程序 void fn struct st int a a struct st b st
  • 使用企业订货软件的担忧与考虑|网上APP订货系统

    使用企业订货软件的担忧与考虑 网上APP订货系统 网上订货系统担心出现的问题 1 如果在订货系统中定错 多 货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误 但是网上订货平台为大家提供了很多的解决方案 其中对于订单的修改
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 在哪里添加 String 原型

    我目前正在 Titanium Studio 中使用 JavaScript CommonJS 并且有一个关于原型设计的问题 假设我想向现有的类添加一个新函数 例如 String prototype trim function return t
  • 对 JavaScript 原生类型进行原型设计,感到沮丧吗?

    在 JavaScript 原生类型 如数组 字符串 数字等 中构建附加功能原型是一个坏主意吗 我认为拥有像 myArr pop 等功能会很棒 但是如果有一天它成为 ECMAScript x 的一部分 并且与我的实现不同 那么它可能会破坏整个
  • Javascript 在原型中使用值类型设置对象属性? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 browser.element 获取到具有子项的页面对象中

    当我派生一个驱动程序实例以在浏览器之间发送消息时 我正在进行测试 我还使用页面对象来映射视图 在我的页面对象中 我有其他页面对象 其中一些对象继承自另一个页面对象 但是 当我分叉了一个驱动程序实例并有两个浏览器可以使用时 获取element
  • 函数构造函数和原型构造函数有什么区别?

    我想知道这有什么区别 MyClass function MyClass prototype Foo function and this MyClass MyClass prototype constructor function MyCla
  • 尝试在 Javascript (ES5) 中实现 OPP 继承的简单方法

    只是出于好奇 我在 Javascript 中玩弄原型继承和 OOP 继承 大多数结果涉及用函数模拟 类 和 扩展 概念 而其他结果则使用原型和构造函数 我写了这段代码 function Warrior weaponName var weap
  • 为什么对数组原型的这种更改在我的 jQuery 插件中不起作用?

    我已将以下方法添加到数组原型中 Array prototype foreach function func for var i 0 i lt this length i if func this i false break return f
  • 面向对象的 Javascript 与纯 jQuery 和 .data 存储

    我当前的编程风格是 OO javascript 使用 John Resig 的 Class extend 函数 http ejohn org blog simple javascript inheritance http ejohn org
  • 更改 window.location 原型以禁用某些重定向?

    我正在尝试有选择地禁用window location 使用 Greasemonkey 位于文档开头 我不想完全禁用 javascript 只是禁用一些使用 javascript 完成的重定向 它们看起来像这样 window location
  • 如何判断一个对象是否具有给定的原型?

    如何检测给定浏览器是否具有searchParams原型为URL https developer mozilla org en US docs Web API URL searchParams https developer mozilla
  • javascript 之谜:两个对象在构造函数、原型和 __proto__ 链接方面看起来相同,但行为不同

    我是一位经验丰富的面向对象程序员 但这让我着迷 为什么我可以执行 new f 而不能执行 new a 我将不胜感激任何指点 first a few facts if Object instanceof Function console lo
  • 通过引用调用原型函数时,类失去“this”范围

    谁能向我解释为什么 b 返回未定义以及如何解决这个问题 当我通过引用调用原型函数时 为什么 this 范围会丢失 MyClass function test this test test MyClass prototype myfunc f
  • Javascript:从已实例化的对象与原型创建对象

    我有一个相当学术的问题 并不特别适用于我正在做的任何事情 我只是真的想知道答案 假设我们在全局命名空间中有一个简单的对象定义 如下所示 TestObject function 它的原型中添加了一个方法 可以实例化为新对象本身 TestObj
  • 将副词应用于动名词列表

    考虑一个动名词列表和一些我们希望循环应用它们的数据 ms NB list of gerunds d 3 4 5 6 NB some data 我们可以做的 ms d NB returns 9 ie the result of 3 4 5 6
  • Javascript `new` 运算符和原型

    假设我们创建一个名为 Shape 的函数 并在其原型上添加属性 name 和方法 toString var Shape function Shape prototype name Shape Shape prototype toString
  • JavaScript 函数和 new 运算符

    向函数对象添加属性与向对象原型添加属性有什么区别 请参阅下面的代码 var foo function this name alert test foo newProp function var value new foo vs foo pr

随机推荐

  • IDEA与IDEA(2020.1版本)的安装

    DEA简介 IDEA 全称 IntelliJ IDEA 是 Java 语言开发的集成环境 IntelliJ 在业界被公认为最好的 Java 开发工具之一 IDEA 是 JetBrains 公司的产品 这家公司总部位于捷克共和国的首都布拉格
  • elementUI中的el-date-picker日期月份时间选择器禁用

    1 时间选择器禁用 当开始时间已经选择时 结束时间不能小于开始时间 即禁用结束时间选择器中开始时间前 反之亦然 template内容
  • 【HarmonyOS】实现将pcm音频文件进行编码并写入文件(API6 Java)

    关键字 音频编码 管道模式 createEncoder 写在前面 在使用API6开发HarmonyOS应用时 如何将pcm源文件进行编码并写入文件 最后生成aac文件 本文直接附上主要代码开发步骤供大家参考 主要功能代码 import oh
  • 现阶段项目介绍及电脑网络/RFID/NFC概述

    现阶段项目介绍及电脑网络 RFID NFC概述 文章目录 现阶段项目介绍及电脑网络 RFID NFC概述 1 现阶段项目介绍和行业前景 2 RFID 1 RFID概述 2 应用 3 技术及性能参数 4 使用风险 3 NFC 1 概述 2 工
  • A*算法解八数码问题

    1 问题描述 1 1什么是八数码问题 八数码游戏包括一个33的棋盘 棋盘上摆放着8个数字的棋子 留下一个空位 与空位相邻的棋子可以滑动到空位中 游戏的目的是要达到一个特定的目标状态 标注的形式化如下 1 2 3 4 5 6 7 8 1 2问
  • [转]vue3中使用vueQuill富文本编辑器详细教程,图片上传-图片压缩

    vueQuill是支持vue3的富文本编辑器组件 使用简单方便 官方网址 https vueup github io vue quill 效果图 1 安装 在官网有详细的安装教程 npm或者yran下载 npm install vueup
  • k8s 以statefulset方式部署zookeeper集群

    k8s 以statefulset方式部署zookeeper集群 参考 k8s官网zookeeper集群的部署 数据挂着方式改成通过本地方式创建的pv https kubernetes io docs tutorials stateful a
  • [深度解剖C语言] --关键字 static

    static 最名不副实的关键字 目录 1 static修饰全局变量 2 static修饰函数 3 static修饰局部变量 static的作用 1 static修饰全局变量 我们创建两个源文件 一个test c 一个main c 现在我们
  • 【日常问题记录】visual studio 出现 E0266 “data“ 不明确 错误

    解决方法 定义的变量和内部变量冲突 将变量的把名字改成其他名字即可
  • 【Kubernetes】mac 安装minikube

    1 一 官网安装 官网 https minikube sigs k8s io 搜了下网上如何通过Mac 安装看网上文章很多 但是受限于国内网络环境 很多都不行 各种下载失败 如果你有VPN 那么官方的步骤就容易走通 brew install
  • 小酌Django3——HTTP/URL/ORM简述

    小酌Django3 HTTP URL ORM简述 HTTP Hyper Text Transfer Protocol 超文本传输协议 是客户端与服务端请求和应答的标准 TCP 封装了Web服务的整个过程 通常 由客户端发起 建立到服务器指定
  • 矩阵基本知识

    1 identity matrix 单位矩阵 除了正对角线上是1 其它地方都是0 2 square matrix 方阵 行数和列数都相等的矩阵 3 diagonal matrix 对角矩阵 只在正对角线上有值 其它地方为0 4 matrix
  • js获取昨天,今天,明天,上周,本周,下周,上月,本月,下月,去年,本年,明年,上季度,本季度,下季度,向前推日期等

    配合的elementul的日期选择器使用的 参数是这样的 1代表 上 0代表 本 1代表 下 本月 1号到今天 意思就是比如今天是10月27号 那点击这个获取的是10月1号到10月27号得 效果如图 按顺序点了一遍 从左到右 上代码
  • 双十一前4小时,CentOS 6.5server启动错误排查

    11月10日晚上8点多 眼看要到双十一了 但我要说的这段经历却和双十一毫无关系 哈哈 这天准备向CentOS6 5server的svn上传一些文件 结果开机启动时 却出现了以下的界面 这是肿么回事 依据屏幕的提示 先使用root账号登录到系
  • JSP page指令errorPage属性起什么作用呢?

    转自 JSP page指令errorPage属性起什么作用呢 下文讲述JSP中page指令的errorPage功能简介说明 如下所示 errorPage功能 errorPage 属性用于设置JSP页面 当出现异常时的跳转页面 注意事项 er
  • STM32G431控制窗帘电机-窗帘电机拆机

    前言 最近做了一个电动窗帘的控制工程 简单点说就是实现电动窗帘的校准模式 窗帘移动到任意位置 说明 本文档为原创 转载请注明出处 要进行商业合作请联系本人1151313194 qq com 一 电机爆炸图拆解 窗帘电机主要时由三部分构成 电
  • Docker的隔离机制

    Docker的隔离性主要运用Namespace 技术 传统上Linux中的PID是唯一且独立的 在正常情况下 用户不会看见重复的PID 然而在Docker采用了Namespace 从而令相同的PID可于不同的Namespace中独立存在 如
  • 自动生成GFM目录

    自动生成GFM目录 自动生成GFM目录 参考文献 引言 使用方法 对于本地文档 对于远程文档 对于多个文档 本地与远程结合 自动插入和更新目录 输出目录文件 工作流程 目前工作流程注意事项及问题 参考文献 https github com
  • Go语言--Nohup后台启动

    linux的nohup命令用法 在应用Unix Linux时 我们一般想让某个程序在后台运行 于是我们将常会用 在程序结尾来让程序自动运行 nohup命令格式 nohup root start sh 在shell中回车后提示 appendi
  • HTML5(六)preserve and recover

    HTML5 六 preserve and recover 1 save the state of canvas context 2 So we have two method to save and restore the state of