zoukankan      html  css  js  c++  java
  • canvas——离屏

    离屏操作:
    1.创建一个新的离屏canvas;
    2.把一些复杂额绘画操作(背景),画在离屏canvas上;
    3.将离屏canvas通过drawImage(离屏canvas对象,x1,y1,offcanvas.width,offcanvas.height,x2,y2,canvas.width,canvas.height)拷贝到原始的canvas上,减少不断绘制复杂操作,提高性能-----最后使用css:display:none将离屏canvas隐藏;

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>离屏canvas</title>
            <style>
                canvas{
                    border: 1px solid red;
                }
                #offCanvas{
    /*                 display: none; */
                }
            </style>
        </head>
        <body>
            <canvas id="myCanvas">您的浏览器不支持canvas</canvas>
            <canvas id="offCanvas">您的浏览器不支持canvas</canvas>
            
            <script>
                var canvas = document.getElementById("myCanvas");
                var ctx = canvas.getContext("2d");
                
                var offCanvas = document.getElementById("offCanvas");
                var offCtx = offCanvas.getContext("2d");
                
                var posx = 0,posy = 0,dir = 1,isMouseInRect = false;
                
                var drawALot = function(){
                    for(var k=0;k<20;k++){
                        for(var i=0;i<canvas.width;i+=10){
                            for(var j=0;j<canvas.height;j+=10){
                                offCtx.beginPath();
                                offCtx.arc(i,j,5,0,2*Math.PI,true);
                                offCtx.stroke();
                            }
                        }
                    }
                }
                
                canvas.onmousemove = function(e){
                    var mouseX = e.offsetX;
                    var mouseY = e.offsetY;
                    if(mouseX > posx && mouseX < posx + 50 && mouseY > posy && mouseY < posy +50){
                        isMouseInRect = true;
                    }else{
                        isMouseInRect = false;
                    }
                }
                setInterval(function(){
                    if(!isMouseInRect){
                        posx += 10 *dir;
                    }
                    //清空画布区域
                    ctx.clearRect(0,0,canvas.width,canvas.height);
                    //drawALot();
                    //使用drawImage(canvas对象)拷贝到原始canvas上
                    ctx.drawImage(offCanvas,0,0,offCanvas.width,offCanvas.height,0,0,canvas.width,canvas.height);
                    ctx.fillRect(posx,posy,50,50);
                    if(posx+50 >= canvas.width){
                        dir = -1;
                    }else if(posx <=0){
                        dir = 1;
                    }
                },100);
                
                drawALot();
            </script>
        </body>
    </html>
  • 相关阅读:
    表格编辑、拖拽、复制、粘贴、剪贴、删除、清空
    winform程序只能打开一个进程
    winform更新程序代码
    winform无标题窗体点击任务栏最小化、还原功能
    winform闪屏问题解决方案
    jQuery 常用方法总结
    理解JSON:3分钟课程
    打造高效的技术团队,我会关注的7个点
    nginx实现网站负载均衡(windows+IIS负载实测)
    怎么用批处理修改host文件
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/11498193.html
Copyright © 2011-2022 走看看