0

私が取り組んでいるページでは、ユーザーがオブジェクトをクリックすると、1つのSVGグループが邪魔にならないように回転し、別のSVGグループが内側に回転します。

そのままのコードはWebKitでは問題なく機能しますが、Geckoではまったく機能しません。Geckoによって実行されていないコードのブロックは次のとおりです。

var totStep = dur*2/msrate, step=0;
window.timer = window.setInterval(function(){
    if(step<totStep/2){
    var inangle = -50*easeIn(step,totStep/2);
    iris.setAttribute("transform","rotate("+inangle+" 23 -82)");}else{
    var prog = easeOut2((step-(totStep/2)),totStep/2);
    var outangle = 50*prog;
    var down = 400*prog;
    vinyl.setAttribute("transform","rotate("+(-50+outangle)+" 986 882)");
    needle1.setAttribute("transform","translate(0 "+(-400+down)+")");
    buttons.setAttribute("transform","translate(0 "+(-400+down)+")");}
    step++;
    if (step > totStep) {window.clearInterval(window.timer); return}
});

このコードのほとんどは、ページが読み込まれたときに目を開く関数から適応されており、その関数はGeckoで正常に機能するため、これは私には謎めいたものです。

このページで、すべてのソースコードを含むページを見ることができます。問題のある関数は、リンクされたeye.jsに記述されています。この問題は、ユーザーがメニューの[音楽]セクションの下にある[DJ Docroot]をクリックすると発生します。このセクションには、任意の場所をクリックしてアクセスします。

4

1 に答える 1

0

関数を呼び出す間隔を指定する setInterval の 2 番目の引数がありません。したがって、たとえば、次のコードは機能します。

window.timer = window.setInterval(function(){
    if(step<totStep/2){
    var inangle = -50*easeIn(step,totStep/2);
    iris.setAttribute("transform","rotate("+inangle+" 23 -82)");}else{
    var prog = easeOut2((step-(totStep/2)),totStep/2);
    var outangle = 50*prog;
    var down = 400*prog;
    vinyl.setAttribute("transform","rotate("+(-50+outangle)+" 986 882)");
    needle1.setAttribute("transform","translate(0 "+(-400+down)+")");
    buttons.setAttribute("transform","translate(0 "+(-400+down)+")");}
    step++;
    if (step > totStep) {window.clearInterval(window.timer); return}
},10);

Webkit はおそらくデフォルト値を想定しているだけです。

また、将来的には、コードをより読みやすくするコード規則を採用すると、次のようなエラーを見つけやすくなる可能性があります: http://javascript.crockford.com/code.html

jslintのようなツールがこれに役立ちます。

于 2010-07-31T21:56:27.090 に答える