使用 javascript/jquery 动态调整画布窗口大小?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11368477/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 05:38:42  来源:igfitidea点击:

Dynamically resize canvas window with javascript/jquery?

javascriptjqueryhtmlcanvas

提问by maxhud

How can I resize a canvas with javascript/jquery?

如何使用 javascript/jquery 调整画布大小?

Resizing using the css function and applying it to the canvas element just stretches the content as if you were stretching an image.

使用 css 函数调整大小并将其应用于画布元素只会像拉伸图像一样拉伸内容。

How would I go about doing this without the stretching?

如果没有拉伸,我将如何做到这一点?

http://jsfiddle.net/re8KU/4/

http://jsfiddle.net/re8KU/4/

回答by Josiah Ruddell

Make a function that does the drawing, then re-draw whenever something changes that requires it (like a page resize, etc). Try it out

创建一个进行绘图的函数,然后在需要它的更改(例如页面大小调整等)时重新绘制。试试看

Make sure you set the context.canvas.width/height, not CSS width/height. Also note that setting the size clears the canvas.

确保你设置的是 context.canvas.width/height,而不是 CSS 的宽度/高度。另请注意,设置大小会清除画布。

How I would write it:

我会怎么写:

(function(){
    var c = $("#canvas"), 
        ctx = c[0].getContext('2d');

    var draw = function(){
        ctx.fillStyle = "#000";
        ctx.fillRect(10,10,50,50);   
    };

    $(function(){
        // set width and height
         ctx.canvas.height = 600;
         ctx.canvas.width = 600;
        // draw
        draw();

        // wait 2 seconds, repeate same process
        setTimeout(function(){
            ctx.canvas.height = 400;
            ctx.canvas.width = 400;
            draw();
        }, 2000)
    });
})();

?

?

回答by Knights

 (function($) {  
        $.fn.extend({  
            //Let the user resize the canvas to the size he/she wants  
            resizeCanvas:  function(w, h) {  
                var c = $(this)[0]  
                c.width = w;  
                c.height = h  
            }  
        })  
    })(jQuery)

Use this little function I created to take care of resizing on the go. Use it this way --

使用我创建的这个小函数可以随时随地调整大小。用这种方式——

$("the canvas element id/class").resizeCanvas(desired width, desired height)

回答by Razan Paul

Whenever the browser is resized, the following solution resizes the dimensions of the canvas based on the dimensions of the window by creating an initial ratio.

每当调整浏览器大小时,以下解决方案都会根据窗口的尺寸通过创建初始比率来调整画布的尺寸。

Jsfiddle: http://jsfiddle.net/h6c3rxxf/9/

jsfiddle:http: //jsfiddle.net/h6c3rxxf/9/

Note: The canvas needs to be re-drawn, when it is resized.

注意:当调整大小时,画布需要重新绘制。

HTML:

HTML:

<canvas id="myCanvas" width="300" height="300" >

CSS:

CSS:

canvas {
    border: 1px dotted black;
    background: blue;
}

JavaScript:

JavaScript:

(function() {
    // get the precentage of height and width  of the cavas based on the height and width of the window
    getPercentageOfWindow = function() {
        var viewportSize = getViewportSize();
        var canvasSize = getCanvastSize();
        return {
            x: canvasSize.width / (viewportSize.width - 10),
            y: canvasSize.height / (viewportSize.height - 10)
        };
    };
    //get the context of the canvas 
    getCanvasContext = function() {
        return $("#myCanvas")[0].getContext('2d');
    };
    // get viewport size
    getViewportSize = function() {
        return {
            height: window.innerHeight,
            width: window.innerWidth
        };
    };
    // get canvas size
    getCanvastSize = function() {
        var ctx = getCanvasContext();
        return {
            height: ctx.canvas.height,
            width: ctx.canvas.width
        };
    };
    // update canvas size
    updateSizes = function() {
        var viewportSize = getViewportSize();
        var ctx = getCanvasContext();
        ctx.canvas.height = viewportSize.height * percentage.y;
        ctx.canvas.width = viewportSize.width * percentage.x;
    };
    var percentage = getPercentageOfWindow();
    $(window).on('resize', function() {
        updateSizes();
    });
}());