2017-07-10 4 views
0

私は自分のウェブサイトにスライドショーを配置する際に問題がありました。同じページに複数のスライドショーが必要なので、スクロールなどの問題が複数発生しています。私は最終的にほぼ完全に機能するソリューションを見つけましたが、インジケータは現在のスライドを反映するように色が変わりません。現在のコードでスライドショーインジケータのスタイルを変更するにはどうすればよいですか?

var w3 = {}; 
 
w3.slideshow = function (sel, ms, func) { 
 
    var i, ss, x = w3.getElements(sel), l = x.length; 
 
    ss = {}; 
 
    ss.current = 1; 
 
    ss.x = x; 
 
    ss.ondisplaychange = func; 
 
    if (!isNaN(ms) || ms == 0) { 
 
    ss.milliseconds = ms; 
 
    } else { 
 
    ss.milliseconds = 1000; 
 
    } 
 
    ss.start = function() { 
 
    ss.display(ss.current) 
 
    if (ss.ondisplaychange) {ss.ondisplaychange();} 
 
    if (ss.milliseconds > 0) { 
 
     window.clearTimeout(ss.timeout); 
 
     ss.timeout = window.setTimeout(ss.next, ss.milliseconds); 
 
    } 
 
    }; 
 
    ss.next = function() { 
 
    ss.current += 1; 
 
    if (ss.current > ss.x.length) {ss.current = 1;} 
 
    ss.start(); 
 
    }; 
 
    ss.previous = function() { 
 
    ss.current -= 1; 
 
    if (ss.current < 1) {ss.current = ss.x.length;} 
 
    ss.start(); 
 
    }; 
 
    ss.display = function (n) { 
 
    w3.styleElements(ss.x, "display", "none"); 
 
    w3.styleElement(ss.x[n - 1], "display", "block"); 
 
    } 
 
    ss.start(); 
 
    return ss; 
 
};
<html> 
 
<script src="w3.js"></script> 
 
<body> 
 
<div id="2" class="w3-row-padding w3-light-grey w3-padding-64 w3-container"> 
 
\t <div class="w3-content"> 
 
\t \t \t <div class="w3-content w3-display-container w3-center"> 
 
\t \t \t 
 
\t \t <div class = "Slide2 w3-animate-opacity"> 
 
     <h1> Slide Content </h1> 
 
\t \t </div> 
 
\t \t <!-- Second slide App Development --> 
 
\t \t <div class = "Slide2 w3-animate-opacity"> 
 
     <h1> Slide Content </h1> 
 
\t \t </div> 
 
\t \t <!-- Third slide App Development --> 
 
\t \t <div class = "Slide2 w3-animate-opacity"> 
 
     <h1> Slide Content </h1> 
 
\t \t </div> 
 
\t \t <!-- Fourth slide App Development --> 
 
\t \t <div class = "Slide2 w3-animate-opacity"> 
 
     <h1> Slide Content </h1> 
 
\t \t </div> 
 
\t \t <div class="w3-center w3-container w3-section w3-large w3-text-grey" style="width:100%"> 
 
\t \t \t <span class="w3-left w3-hover-text-blue fa fa-arrow-left" onclick="myShow2 .previous()"></span> 
 
\t \t \t <span class="w3-right w3-hover-text-blue fa fa-arrow-right" onclick="myShow2 .next()"></span> 
 
\t \t \t <span class="fa fa-circle demo w3-hover-text-blue w3-transparent" onclick="myShow2 .display(1)"></span> 
 
\t \t \t <span class="fa fa-circle demo w3-hover-text-blue w3-transparent" onclick="myShow2 .display(2)"></span> 
 
\t \t \t <span class="fa fa-circle demo w3-hover-text-blue w3-transparent" onclick="myShow2 .display(3)"></span> 
 
\t \t \t <span class="fa fa-circle demo w3-hover-text-blue w3-transparent" onclick="myShow2 .display(4)"></span> 
 
\t \t </div> 
 
\t \t 
 
\t \t </div> 
 
    </div> 
 
    <script> myShow2 = w3.slideshow(".Slide2", 0); </script> 
 
</div> 
 
</body> 
 
</html>

ので、コードがうまく機能し、私はサークル指標は現在のスライドを反映するために、青に変化させる方法がわからないんだけど除いて、私が欲しいものを行います。私は、同じページに複数のスライドショーを可能にする唯一の方法以外は全く異なるアプローチを試みました。私は、クリックしたときにサークルを青色にし、別のものをクリックしたときに元に戻す方法について説明してください。

+1

あなたのスニペットでは残念ながら、 'w3'は未定義です。 [**最小限で、完全で、検証可能な例**](http://stackoverflow.com/help/mcve)を提供してください。 P –

+0

w3はcssで定義されていますが、私はそれをSOでどのように参照するかはわかりませんが、問題を解決するにはちょっと難しいです。問題は、私が感じる論理によります。 –

+1

w3はCSS yesで定義されていますが、JavaScriptでは定義されていません。 'var w3? 'をどこで初期化していますか?フレームワークやプラグインを使っていますか?これに加えてコードはありますか? –

答えて

0

私は私の問題の解決策を見つけました。最初に、関数を呼び出すために余分な変数を追加しました<script> myShow4 = w3.slideshow(".Slide4", 0, "demo4"); </script> "demo4"がインジケータドットを見つけるために使われます。 <span class="fa fa-circle demo4 w3-hover-text-blue w3-transparent" onclick="myShow4 .display(4)"></span>各指標には特定のクラスがあります。

`ss.display = function (n) { 
    ss.current = n; 
    w3.styleElements(ss.x, "display", "none"); 
    w3.styleElement(ss.x[n - 1], "display", "block"); 
    ss.indicator(demo); 
    } 
    ss.indicator = function(n) { 
     var dots = document.getElementsByClassName(n); 
     for (i = 0; i < dots.length; i++) { 
     dots[i].className = dots[i].className.replace(" w3-text-blue", ""); 
     } 
     x[ss.current-1].style.display = "block"; 
     dots[ss.current-1].className += " w3-text-blue"; 
    }` 

これはJSファイル内の新しいコードです。ボタンをクリックすると表示機能が呼び出され、現在のスライドに関連するドットが青色に変わるインジケータ機能を呼び出すための機能が編集され、残りは何も変わらないか、または以前の状態に変更されます。この解決策は私のために働き、呼び出された関数内に別の関数を追加しました。

関連する問題