`
sillycat
  • 浏览: 2552665 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

HTML5(六)preserve and recover

    博客分类:
  • UI
阅读更多
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"
    onmousedown="trans.transform(event);"
    onmouseup="trans.init(event);"
    onmousemove="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" onclick="move(1);" value="Move1">
<input type="button" onclick="move(2);" value="Move2">
<input type="button" onclick="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
分享到:
评论

相关推荐

    (iPhone程序开发)Oreilly.iPhone.Forensics.chm

    Conduct data recovery of a v1.x and v2.x iPhone user disk partition, and preserve and recover the entire raw user disk partition Recover deleted voicemail, images, email, and other personal data, ...

    IE6/7/8支持Html5

    IE7、7、8想必大家都知道了,对Html5支持是有很大的问题的,现提供html5shiv.js来解决此问题。用法如下所示: &lt;!--让IE(IE6/7/8)支持Html5标签--&gt; &lt;!–[if lt IE9]&gt; &lt;script src="Content/Js/...

    HTML5+CSS3实例 :3D立方体旋转

    HTML5和CSS3是现代网页开发的两大核心技术,它们为网页设计带来了前所未有的可能性和交互体验。本实例聚焦于HTML5+CSS3实现的3D立方体旋转效果,这是一个能够吸引用户注意力,提升网站视觉吸引力的炫酷特效。 HTML5...

    HTML5+CSS3实现的3D自动滚动特效源码

    HTML5和CSS3是现代网页开发的两大核心技术,它们为网页设计带来了丰富的功能和美观的视觉效果。在"HTML5+CSS3实现的3D自动滚动特效源码"这个项目中,我们可以深入探讨这两个技术如何协同工作,创建出令人印象深刻的...

    html5跟随鼠标悬停图片3D立体动画特效

    HTML5是一种先进的网页开发技术,它为网页设计者和开发者提供了更多创新的可能性。"跟随鼠标悬停图片3D立体动画特效"是HTML5在交互性和动态视觉效果方面的一个精彩示例。这种效果能够提升用户体验,使得网站或应用...

    HTML5 + CSS3 实现 3d 室内布局源码

    HTML5和CSS3是现代网页开发的两大核心技术,它们共同为网页设计师提供了强大的工具来创建交互性和视觉吸引力的页面。这个“HTML5 + CSS3 实现 3d 室内布局源码”项目是一个很好的实例,展示了如何利用这两种技术来...

    一个支持3D变换的HTML5 视频播放特效.rar

    【HTML5视频播放特效】 HTML5是Web开发领域的一个重大突破,它引入了许多新的功能和API,其中之一就是内建的视频支持。这个“支持3D变换的HTML5视频播放特效”是一个创新性的实现,旨在为现代智能手机和电脑上的...

    HTML5绘制3D魔方旋转动画.rar

    HTML5和CSS3是现代网页开发中的核心技术,它们极大地扩展了网页的表现力和交互性。在本案例中,“HTML5绘制3D魔方旋转动画”是一个利用这两种技术创建的互动效果,展示了HTML5 Canvas和CSS3的强大功能。下面将详细...

    基于HTML5手机上下滑动翻页特效

    HTML5手机上下滑动翻页特效是现代移动应用和网页设计中的一个重要元素,它提供了流畅、直观的用户体验,尤其在阅读长篇文章或浏览多页面内容时。这种效果通常结合CSS3和JavaScript技术来实现,充分利用了HTML5的新...

    html5-3D旋转文字或图片

    HTML5是一种先进的网页开发技术,它为网页设计者和开发者带来了丰富的交互性和动态表现能力。在本主题"html5-3D旋转文字或图片"中,我们将深入探讨如何利用HTML5实现3D旋转效果,特别是在展示文字和图像时的创新应用...

    HTML5 CSS3大风车旋转动画.zip

    HTML5和CSS3是现代网页开发的两大核心技术,它们为开发者提供了丰富的功能和表现力,尤其是在创建动态和交互式用户体验方面。"HTML5 CSS3大风车旋转动画"是一个利用这两种技术实现的炫酷视觉效果,它展示了HTML5的...

    html5-css-3d.rar

    HTML5和CSS3是现代网页开发的两大核心技术,它们极大地扩展了网页的视觉表现力和交互性。在本压缩包“html5-css-3d.rar”中,重点展示了CSS3的3D转换特性,用于创建引人注目的3D图形和动画效果。这个示例项目名为...

    情人节程序员用HTML网页表白【3D旋转木马相册】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript

    ### 知识点一:HTML5在情人节表白网页中的应用 - **HTML5的重要性与功能扩展**:HTML5是超文本标记语言的最新版本,它不仅增强了网页的表现力,还引入了许多新特性来改善用户体验。在情人节表白网页的设计中,HTML5...

    Uncomment this to preserve the line number information for

    在编程和文本编辑中,"Uncomment this to preserve the line number information for" 是一句常见的注释,用于指示程序员或开发者保留某段代码的行号信息。行号信息在调试、跟踪代码逻辑或协同编辑时非常有用,因为...

    html5+css3页面3d翻转展现导航菜单特效

    HTML5和CSS3是现代网页开发的两大核心技术,它们为创建动态、交互性强的网页提供了无限可能。在这款"html5+css3页面3d翻转展现导航菜单特效"中,开发者巧妙地利用了HTML5的新特性以及CSS3的3D变换功能,实现了导航...

    html5+css3图片动画处理

    HTML5和CSS3是现代网页开发的两大核心技术,它们提供了丰富的功能和强大的表现力,尤其在处理图片动画方面。在“html5+css3图片动画处理”这个主题中,我们将探讨如何利用这两种技术来实现图片的动态展示,包括图片...

    使用HTML5和css3制作3d立方体动画3d.zip

    在本教程中,我们将深入探讨如何使用HTML5和CSS3创建3D立方体动画。这个主题对于初学者来说尤其有用,因为它是理解CSS3 3D变换和动画的基础。通过这个压缩包文件“53bb9e1c0001a00400000000”,我们可以一步步地学习...

    HTML5+CSS3实现3d立方体源码

    要创建3D立方体,我们需要首先定义一个包含六个面的容器,每个面都是一层HTML元素(如`div`),并赋予不同的背景颜色以代表立方体的不同面。然后,通过CSS3的`transform-style: preserve-3d;`属性确保子元素在3D空间...

Global site tag (gtag.js) - Google Analytics