Dynamically resize canvas window with javascript/jquery?

后端 未结 3 1032
野的像风
野的像风 2020-12-15 19:04

How can I resize a canvas with javascript/jquery?

Resizing using the css function and applying it to the canvas element just stretches the content as if you were str

相关标签:
3条回答
  • 2020-12-15 19:37

    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.

    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)
        });
    })();
    

    0 讨论(0)
  • 2020-12-15 19:42
     (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)
    
    0 讨论(0)
  • 2020-12-15 19:44

    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/

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

    HTML:

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

    CSS:

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

    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();
        });
    }());
    
    0 讨论(0)
提交回复
热议问题