【问题标题】:Why when I add function into Snap.load(...loading SVG... my method...) I cannot then call this method, which is inside to Snap.Load()?为什么当我将函数添加到 Snap.load(...正在加载 SVG...我的方法...) 时,我无法调用 Snap.Load() 内部的这个方法?
【发布时间】:2014-10-20 11:56:34
【问题描述】:

为什么当我将函数添加到 Snap.load(...正在加载 SVG...我的方法...) 时,我无法调用 Snap.Load() 内部的这个方法?

function myComponent() {
    var paper = Snap("#svg3");

    Snap.load("svg/thermometer_o.svg", function (f) {
        paper.append(f);
        paper.selectAll("#empty").attr({fill: "#f00"});

       myMethod = function(perc){
            var v= 350 * ((perc) / 100);
            var py = (557 - v);
           animate = function(){   
          paper.selectAll("#empty").animate({height: v, y: py, x: "340"}, 3000);};
    };      


    });
}


function onPageLoad() {
    componentThermometer().myMethod(40);

} 

【问题讨论】:

    标签: javascript raphael snap.svg svg-animate


    【解决方案1】:

    有一些问题,也许有些与只是将一些位粘贴到 SO 有关,但我会提到它们以防万一。

    componentThermometer() 是什么或在哪里?我没有看到它在任何地方定义。

    如果它以某种方式调用 myComponent,则需要考虑事件的顺序。 Snap.load 是异步的,因此可能需要任何时间。

    所以你在页面加载完成后调用 componentThermometer.MyMethod()。

    如果我们知道 myComponent 的逻辑...myMethod 在 Snap.load 完成之前不可用。所以我不太确定这种方法是如何可用的,除非某处缺少代码。

    我想你想做的是把 myMethod 放在 Snap.load 处理程序之外(我目前看不出有任何理由让它在那里)。您可能只想在 Snap.load 完成后调用 myMethod(而不是当前在加载后定义它)。

    如果您可以使用 jsfiddle 上的基础知识来获得一个测试示例以进一步提供帮助,那将会有所帮助。

    从codepen,我会这样做......

    var paper = Snap("#svg3");
    
    function componentThermometer( perc ) {         
        Snap.load("https://raw.githubusercontent.com/chovancova/project/master/public_html/teplomer_1/svg/thermometer_o.svg", function(f){
            paper.append(f);
            paper.selectAll("#empty").attr({fill:"#f00"});
    
            animateThermometer( perc );       
      });
    };   
    
    
    function animateThermometer( perc ) {  
            var vyska =  350*( perc / 100);
            var py = 557-vyska  ;
            paper.selectAll("#empty").animate({height: vyska, y:py, x:"342.882"}, 800);
    };
    
    componentThermometer(50);
    

    【讨论】:

    • 我曾尝试将它放在 Snap.load 之外,但它没有做任何事情,因为它无法识别 Snap.load 中的元素。我把代码放在codepen.io/6542/pen/AiGwj?editors=101
    • 问题是我不能在 Snap.load() 之外调用这个函数。例如 componentThermometer(20).animateThermometer(75)
    • 为什么需要,只需在 componentThermometer 中添加一个额外的参数? animateThermometer 在加载 svg 之前不会存在,那么在加载之前如何调用它?您要么需要保持简单,要么将 animateThermometer 作为带有参数或其他内容的回调传递,但这很麻烦。
    猜你喜欢
    • 2013-11-24
    • 2023-03-11
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2018-01-29
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多