简体   繁体   English

在特定时间在HTML5画布上绘制SVG文件

[英]Drawing a SVG file on a HTML5 canvas at a specific time

I found the topic Drawing an SVG file on a HTML5 canvas about rendering SVG. 我发现了有关在HTML5画布上绘制SVG文件的主题,有关渲染SVG。 Is there a way to draw SVG animated file at specific moment of time? 有没有一种方法可以在特定时间绘制SVG动画文件? I mean, how to change the code 我的意思是,如何更改代码

var img = new Image();
img.onload = function() {
    ctx.drawImage(img, 0, 0); // define time at here: time="1.3sec"
}
img.src = "myfile.svg";

such that img contains svg at specific time? 这样的img在特定时间包含svg? The file myfile.svg contains the following: 文件myfile.svg包含以下内容:

<svg
   xmlns="http://www.w3.org/2000/svg"
   viewBox="0 0 200 200"
   id="svg2">

    <g transform="translate(100, 100)">
        <path transform="matrix(0.99982594,0.01865711,-0.01865711,0.99982594,0,0)" style="opacity:1;fill:#28b327;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="M 23.755845,-0.77020556 A 23.938168,23.938168 0 0 1 -0.1823229,23.167962 23.938168,23.938168 0 0 1 -24.12049,-0.77020556 23.938168,23.938168 0 0 1 -0.1823229,-24.708373 23.938168,23.938168 0 0 1 23.755845,-0.77020556 Z" id="ball-2-path4136">
        <animate to="M 17.577751,-4.4423325 A 17.748762,27.248762 1.0690357 0 1 -0.67630452,22.470547 17.748762,27.248762 1.0690357 0 1 -17.913594,-5.1046137 17.748762,27.248762 1.0690357 0 1 0.3404618,-32.017493 17.748762,27.248762 1.0690357 0 1 17.577751,-4.4423325 Z" dur="0.2" begin="1.4" attributeName="d" fill="freeze"/></path>

    </g>
</svg>

People usually suggest to use canvg, but as far as I understood it does not support path animation, so my example does not work with it. 人们通常建议使用canvg,但据我了解,它不支持路径动画,因此我的示例无法使用它。

You can simply use setTimeout to defer the insertion of the square, in this fashion : 您可以简单地使用setTimeout以这种方式推迟正方形的插入:

var delayInMilliseconds = 3000;

img.onload = function() {
    setTimeout(function() {
        // This will happend 3 seconds after page load
        ctx.drawImage(img, 0, 0);
    }, delayInMilliseconds);
}
img.src = "http://upload.wikimedia.org/wikipedia/commons/d/d2/Svg_example_square.svg";

In case you want to be able to specify a date and time for the event, use a custom function to count the time left to the target date : 如果您希望能够指定事件的日期和时间,请使用自定义函数计算到目标日期的剩余时间:

function getTimeTo(date) {
    var time = date.getTime() - Date.now();
    return time;
}

And replace delayInMilliseconds with getTimeTo(targetDate) . 并用getTimeTo(targetDate)替换delayInMilliseconds See this fiddle for experimenting. 请参阅此小提琴进行实验。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM