2

jQuery と SWFObject を実行している Web サイトがあります。ページが読み込まれると、2 秒のタイムアウトが設定され、SWFObject インスタンスがトリガーされてムービーが読み込まれます。ムービーが終了すると、プレイヤーは JS にコールバックして、別のムービーをトリガーします。他のムービーは正常に読み込まれ、再生されます。再生が完了すると、2 番目のムービーも別のコールバックをトリガーするはずですが、そうではありません。私が問題だと思うのは、2番目の映画の初期化で、SWFObjectがそれを再利用できるように前の要素をクリアしてリセットすることになっていることです。それがDOMで起こっているにもかかわらず、SWFObjectは要素を再利用しません. これは、SWFObject が要素を再利用しようとしているときに IE をスローしている DOM から要素が削除されたにもかかわらず、jQuery が何らかの形で要素の保持を保持しているためであると考えられます。

私は自分のコードを添付しているので、誰かがそれが機能していない場所を見つけることができるかもしれません。または、jQuery を取得して DOM と jQuery オブジェクトの両方から要素をクリアする方法について誰かが提案している場合もあります。

コードは少し整理されていないように見えるかもしれませんが、スタック オーバーフローに投稿するのはこれが初めてなので、すべてのコードを適切な形式で投稿する方法がわかりません...

前もって感謝します!

var Shadow;
var ActorWrapper, VideoWrapper;
var Actor, Video;
var Navigation;
var Flash, Random;
var t;

$(document).ready(function () {
if (jQuery.browser.msie && jQuery.browser.version <= 6) {
    $(".Body").supersleight();
};

t = window.setTimeout(function () {
    window.clearTimeout(t);

    Flash = $("#Flash");

    if (Boolean(Flash.val())) {
        Shadow = $("#Shadow");
        ActorWrapper = $("#ActorWrapper");
        Actor = $("#Actor");
        VideoWrapper = $("#VideoWrapper");
        Video = $("#Video");
        Random = $("#Random");
        Navigation = $(".Navigation");

        VideoWrapper.css({
            left: parseInt(($(document).width() - 400) / 2),
            top: parseInt(($(window).height() - 300) / 2)
        });

        IncomingActor();
    };
}, 2000);
});

var IncomingActor = function () {
ActorWrapper.css({
    display: "block",
    height: 325,
    left: parseInt((($(window).width() - 714) / 2) - 46),
    width: 180
});

swfobject.embedSWF("/Resources/Flash/Player.swf", "Actor", "180", "325", "9", null, {
    Path: "Amy-1.flv",
    Callback: "Vid",
    Buffer: 2,
    Width: 180,
    Height: 325
}, {
    play: true,
    loop: false,
    quality: "best",
    wmode: "transparent",
    swliveconnect: true,
    allowscriptaccess: "always"
});

Navigation.css({
    textAlign: "right"
});
};

var Vid = function () {
$("#Actor").remove();
$("#ActorWrapper").html("<div id=\"Actor\"></div>");

VideoWrapper.css({
    display: "block"
});

Shadow.css({
    display: "block",
    height: $(document).height(),
    width: $(document).width()
}).animate({
    opacity: 0.6
}, 1000).click(function () {
    VideoWrapper.animate({
        opacity: 0
    }, 500);

    t = window.setTimeout(function () {
        window.clearTimeout(t);

        VideoWrapper.css({
            display: "none"
        });

        Shadow.animate({
            opacity: 0
        }, 500);

        t = window.setTimeout(function () {
            window.clearTimeout(t);

            Shadow.css({
                display: "none"
            });
        }, 500);
    }, 500);
});

swfobject.embedSWF("/Resources/Flash/Player.swf", "Video", "400", "300", "9", null, {
    Path: (Random.val() + ".flv"),
    Callback: "OutgoingActor",
    Buffer: 2,
    Width: 400,
    Height: 300
}, {
    play: true,
    loop: false,
    quality: "best",
    wmode: "transparent",
    swliveconnect: true,
    allowscriptaccess: "always"
});

VideoWrapper.animate({
    opacity: 1
});

Navigation.css({
    textAlign: "center"
});
};

var OutgoingActor = function () {
ActorWrapper.css({
    left: (parseInt(ActorWrapper.css("left")) + 10)
});

VideoWrapper.animate({
    opacity: 0
}, 500);

t = window.setTimeout(function () {
    window.clearTimeout(t);

    VideoWrapper.css({
        display: "none"
    });

    Shadow.animate({
        opacity: 0
    }, 500);

    t = window.setTimeout(function () {
        window.clearTimeout(t);

        Shadow.css({
            display: "none"
        });
    }, 500);
}, 500);

swfobject.embedSWF("/Resources/Flash/Player.swf", "Actor", "180", "325", "9", null, {
    Path: "Amy-2.flv",
    Callback: "RemoveOutgoingActor",
    Buffer: 2,
    Width: 180,
    Height: 325
}, {
    play: true,
    loop: false,
    quality: "best",
    wmode: "transparent",
    swliveconnect: true,
    allowscriptaccess: "always"
});

Navigation.css({
    textAlign: "right"
});
};
4

1 に答える 1

0

xmlファイルで指定されたプレイリストを使用したほうがいいのではないでしょうか。

于 2009-08-10T19:45:03.290 に答える