8

jQueryサイクルを使用してレスポンシブ画像スライダーを作成しました。

私が使用した次のセットアップは、含まれているdivが正しくクリアされていないことを除けば、正常に機能.cycleし、その下に配置された後にコンテンツを作成します。

これは、divが相対的であり、その子が絶対的であるという事実によるものです。

     $('.cycle').cycle({
        slideResize: true,
        containerResize: false,
        fit: 1,
        width: "fit"
     });

.cycle私の質問は、高さを固定したり、イベントの多いJavaScriptを使用したりせずに、レスポンシブdivをクリアするにはどうすればよいですか?

これがjsfiddleの私のコードです:http://jsfiddle.net/blowsie/HuNfz/19/


アップデート:

サイクルの高さを修正するためのコードをいくつか作成しました。これは期待どおりに機能しますが(場合によってはバグが発生する可能性があります)、イベントは重く、あまりスムーズではありません。

見たいのは、純粋なCSSまたはサイクル設定の変更で実行できることです。

http://jsfiddle.net/blowsie/HuNfz/22/

4

4 に答える 4

9

サイクルはあまり反応が良くありません。しかし、Cycle2は間違いなくそうです。ここでそれをチェックしてください:http: //jquery.malsup.com/cycle2/

于 2012-09-26T13:59:42.727 に答える
0

おそらくサイズ変更ウィンドウを追加します:

$(window).resize(function () {
    $('.cycle').height($('img:visible').height());
});
setTimeout(300, $(window).resize());

http://jsfiddle.net/HuNfz/60/

于 2012-10-09T21:41:45.147 に答える
0

古い投稿、私は知っています。

サイクルで本番環境で動作させています。Cycle2は、私たちにとってオプションではありませんでした。残念ながら、これにはサイクルの内部データの変更が含まれます。幸いなことに、修正は簡単です。

サイクルプラグインが初期化されると、2つのプロパティcycleWcycleHが、各スライドの初期幅と高さでそれぞれスライドのDOMオブジェクトに追加されます。Cycleはこれらのプロパティを使用して、ウィンドウのサイズに関係なく各スライドをアニメーション化します。

ウィンドウのサイズを変更するときは、cycleWとcycleHを手動でクリアするか、事前に決定された値に設定する必要があります

例(スライドショーコンテナが.slideshowであると仮定):

$(".slideshow").children("div").each(function(){
    this.cycleW = $(this).width();
    this.cycleH = $(this).height();
});

私たちはそれを本番環境で非常にうまく機能させています。

htmlは次のようになります。

<div class="slideshow">
    <div class="slide"><img src=".." width="100%" height="auto"/></div>
    <div class="slide"><p>Copy copy copy no photo on slide </p></div>
    <div class="slide"><img src=".." width="100%" height="auto"/></div>
    <div class="slide"><p>Copy copy copy no photo on slide </p></div>
    ...
</div>

これで、ウィンドウのサイズ変更機能が機能します。これが私たちのバージョンです。ニーズに合わせてこれをカスタマイズする必要があるかもしれません。基本的に、スライドショーに固定画像がある場合の初期比率を保存します。高さが可変のスライドショーがある場合があります。このコードは両方の状況に対処します。次に、各スライドDOM要素の内部cycleWおよびcycleH値を、親コンテナーに合うようにリセットします。

$(window).resize(function(){
    // first time around, save original width & height for ratios and complicated preloading
    $(".slideshow").each(function(i,elt){
        var originalWidth = $(elt).data("originalWidth"); // check existence of our ratio cache
        if (typeof originalWidth == "undefined") {
            var containerWidth = $(elt).parent().first().width(); // auto scale to container width.
            var containerHeight = $(elt).parent().first().height();
            $(elt).data("originalWidth",containerWidth);
            $(elt).data("originalHeight",containerHeight);
        }
    });

    // fix slideshows to their container width
    $(".slideshow").each(function(i,elt){
        var containerWidth = $(elt).parent().first().width();
        var originalWidth = $(elt).data("originalWidth")*1;
        var originalHeight = $(elt).data("originalHeight")*1;
        var height = Math.floor(originalHeight*containerWidth/originalWidth);   // maintain original ratio
        $(elt).css("width", containerWidth+"px").css("height",height+"px"); // container actual dimensions. height might get reset again below
        $(elt).children("div").css("width", containerWidth+"px"); // reset each slide width 
                                                                 // (fails once slide moves out, because the cycle plugin will use a cached value)
        $(elt).children("div").children().css("width", containerWidth+"px"); // fix direct children (images or divs - images should have height auto).

        // recompute max height based on inside slide, not just photos.
        // some slideshows have variable height slides.
        var maxHeight = 0;
        var panelArray = $(elt).children("div");
        for (var i = 0; i < panelArray.length; i++) {
            var height = $(panelArray[i]).height();
            if (height > maxHeight) maxHeight = height;
        }
        if (maxHeight > 0) {
            $(elt).height(maxHeight);
        }

        // fix internal cycle dimension cache (cycleW and cycleH on each slide)
        $(elt).children("div").each(function(){
            this.cycleW = containerWidth;
            this.cycleH = maxHeight;
        });
    });
});
于 2015-01-27T11:31:29.673 に答える
-1

デフォルトでは、プラグインはposition:relativeをyourに割り当て、その中のsにもposition:absolute値とz-index値を割り当てます。これにより、スライドショーがフローターになり、スタックでスタックが解除されます。私はこの問題に対する2つの解決策を見つけました:

  1. clearfixクラスをに追加し、clearfixのcssスタイルをスタイルシートに追加します。

    .clearfix:after {content:"。"; 表示ブロック; 明確:両方; 可視性:非表示; 行の高さ:0; 高さ:0; }

    .clearfix {display:inline-block; }

    html [xmlns] .clearfix {表示:ブロック; }

    • html .clearfix {高さ:1%; }
  2. (あまりエレガントではありません)サイクルクラスに境界線を追加します

    .cycle {border:1px solid#f00; }

これらのいずれかがお役に立てば幸いです。

于 2012-09-26T11:12:05.093 に答える