4

drawPointforループを使用して数回呼び出される関数があります。反復の量は、ユーザーが表示しているスライドによって異なります。平均して、ループは 8 ~ 10 回繰り返されます。ホバーイベントがすべての反復に固執する場合とそうでない場合があります。ほとんどの場合、ポイントの 3 ~ 4 を逃します。実際にはパターンはありません。ただし、要素がイベントの受信に一度失敗すると、ブラウザーの更新後でも常に失敗します。

一部の svg 要素がイベントを受信し、他の要素がイベントを受信しない理由を考えられる人はいますか? 最初はハンドラの上限があると思っていたのですが、稼働するイベントの数が変動します。for ループで何度も呼び出される関数は次のとおりです。

ドローポイント

drawPoint:function (imgPoint, radius, index, arrowHead) {

    var div = document.createElement("div");
    //div.className = "point";
    //div.id = "p" + index;

    if(arrowHead == false){
        div.style.width = radius*2 +"px";
        div.style.height = radius*2 +"px";

    }else{ //TODO implement actual arrowhead instead of smaller dot
        div.style.width = radius/2 +"px";
        div.style.height = radius/2 + "px";

    }

    div.style.zIndex = 10000 + index + "";

    var paper = Raphael(div);
    var point;

    //console.log("leader x: " + leader.xLength + "\nleader y: " + leader.yLength + "\nmagnitude: " + leader.magnitude);
    if (arrowHead == false) {
        point = paper.circle(radius, radius, radius);
    }
    else if (arrowHead == true){
        point = paper.circle(radius/2, radius/2, radius/2);
    }

    point.node.setAttribute("id", "p" + index );
        point.attr({
            "stroke":Overlay.annoColor,
            "fill":Overlay.annoColor
        });

    point.hover(function(){
            if ($("#allAnno").is(":checked"))
                Overlay.showLabel(parseInt(this.node.getAttribute('id').substring(1)))},
        function(){
            if ($("#allAnno").is(":checked"))
                Overlay.hideAllLabels();

        }
    );

    /*$(".point").hover(function(){
            if ($("#allAnno").is(":checked"))
                Overlay.showLabel(parseInt($(this).attr('id').substring(1)))},
        function(){
            if ($("#allAnno").is(":checked"))
                Overlay.hideAllLabels();
        });*/

    return div;
}

そして、インスタンス化するループ...

 for (var v = 0; v < Overlay.currentOverlaySet.length; v++) {
                    ImageProvider.viewer.drawer.addOverlay(Overlay.drawPoint(Overlay.currentOverlaySet[v].SDPoint,
                        pointRadius, Overlay.currentOverlaySet[v].matchIndex, Overlay.currentOverlaySet[v].arrowHead),
                        Overlay.currentOverlaySet[v].SDPoint, Seadragon.OverlayPlacement.CENTER);
                }

ご協力いただきありがとうございます!

4

1 に答える 1

1

誰かがこの問題を抱えている場合、解決策は、Raphael オブジェクトに渡される div ではなく、Raphael 用紙のサイズを変更することです。何らかの理由で、div が互いに覆い隠しており、一部の要素の hover イベントをブロックしています。複数のオブジェクトの z-index を変更することでこの問題を解決することもできますが、アプリケーションによっては、それほど堅実ではありません。

于 2013-03-11T02:59:34.073 に答える