【问题标题】:draw box in javascript在javascript中绘制框
【发布时间】:2018-02-06 13:51:35
【问题描述】:

我正在尝试为一个盒子的绘图制作动画,然后在它完成后填充。我正在学习 JS 的课程,所以代码必须是 JS。问题是框​​的右侧无法正确设置动画。如果我为它输入一组坐标,它会从底部到顶部而不是从顶线开始的角落开始动画。当我反转坐标时,它确实从正确的角开始动画,但不是画线,而是从实线开始并从它移开,就像一条消失的线。此外,左右侧线似乎都超出了分配的区域。例如,我的区域是 600 x 400,线条从页面底部移开。如果我将尺寸更改为 600 x 600,线条仍然会离开页面。整个项目的重点是我们使用 SVG 库对房屋进行了编码,并且我想创建一个动画,使其看起来好像房屋在填充颜色之前正在绘制。这更多的是我自己的知识,因为它不再是一项任务。我的 jsfiddle 有 2 个链接,第一个是绘制框的问题代码。第二个是我想要动画的房子的样子。

drawing box

    "use strict"
    var draw = SVG('drawing').size(600, 400);

    function makeBox()

    {
    var line1 = draw.line(25,175,26,175);
    line1.stroke({width:1});
    line1.animate(4000).size(550);

    var line2 = draw.line(575,175,575,176);
    line2.stroke({width:1});
    line2.animate({duration:4000,delay:4000}).size(200).move(575,375);


    var line3 = draw.line(575,375,574,375);
    line3.stroke({width:1});
    line3.animate({duration:4000,delay:8000}).move(25,375).size(550);

    var line4 = draw.line(25,375,25,374);
    line4.stroke({width:1});
    line4.animate({duration:4000,delay:12000}).size(200).move(25,175);
    }
    makeBox();


    function makeBaseb1(bx,by,c,s)

    {
    var Baseb1 = draw.rect(550,200).opacity(0).fill(c).stroke();
    Baseb1.animate({delay:'16s'}).opacity(1).fill({color:c});
    Baseb1.stroke({width:s,color:'black'});
    Baseb1.move(bx,by);

    }
    makeBaseb1(25,175,'#FF9900',1);

house

【问题讨论】:

    标签: javascript svg jquery-animate line


    【解决方案1】:

    makeBox 函数存在 2 个问题:

    • .size 方法采用 2 个参数而不是 1 个参数(xy 维度)。
    • 对于与坐标系相反方向的线图, 起始坐标和线长都需要动画。

    更新功能:

    function makeBox() {
        var line1 = draw.line(25,175,26,175);
        line1.stroke({width:1});
        line1.animate(4000).size(550,0);
    
        var line2 = draw.line(575,175,575,176);
        line2.stroke({width:1});
        line2.animate({duration:4000,delay:4000}).size(0,200); 
    
        var line3 = draw.line(574,375,575,375);
        line3.stroke({width:1});
        line3
            .animate({duration:4000,delay:8000})
            .during(
                function (pos, morph, eased, situation) {
                    line3.x(morph(574,25));
                    line3.size(morph(1,550),morph(0,0));
                }
             )
        ;
    
        var line4 = draw.line(25,374,25,375);
        line4.stroke({width:1});
        line4
            .animate({duration:4000,delay:12000})
            .during(
                function (pos, morph, eased, situation) {
                    line4.y(morph(374,175));
                    line4.size(morph(0,0),morph(1,200));
                }
             )
        ;
    }
    

    .during 方法的使用记录在 here

    【讨论】:

    • 天啊,非常感谢。我问过 2 位老师和 2 位助教,编码可能有什么问题。他们看不到任何能让它按原样运行的东西。我被告知忘记它并继续我们的下一个任务。我不能放手,因为我需要看到它工作。我才刚刚开始,我们只有 5 周的时间,并且因为我们还没有开始动画,所以我自己弄清楚了代码。再次,非常感谢。
    • 我还有一个问题想知道您是否可以提供帮助。我正在尝试为我使用 JS 制作的整个房子制作动画,就像这个盒子一样。我不一定只需要答案,但我想学习如何去做。目前阅读 SVGjs 并不能帮助我理解这一切。至少看看我做的房子,也许你可以为我指出一些教程或一些可以帮助我更好地理解制作动画的方向。非常感谢您提供的任何帮助。谢谢jsfiddle.net/Jesta1972/ajsa7nav
    • @Jesta1972 我个人非常喜欢深入研究规格,在这种情况下是the W3C standard。然而,这是一个品味问题——MDN 的内容通常以更温和的方式呈现主题,同时保持质量。有一个tutorial about SVG 可能是一个好的开始。
    • 我还在为你之前帮我装修的房子工作。我想知道您是否可以帮助指出我的代码中导致这些线条无法正确绘制的原因。我已经设法让所有其他人开始工作,但这条线要么走错了路,要么从底部开始并反过来,无论我如何移动数字,我都无法让它工作。 jsfiddle.net/Jesta1972/wyrperph
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多