特定のページのスライドのリストを参照するメニューがあります。次のコード (HTML) ですべてうまくいきました。
<ul class="dropdown">
<li class="orange"><a href="#" data-jumpslide="2"><div class="list-item one-liner"><div class="left"><span id="functionality-icon"></span></div> <div class="right">When to do it</div><div class="clear"></div></div></a></li>
<li class="orange"><a href="#" data-jumpslide="3" ><div class="list-item one-liner"><div class="left"><span id="functionality-icon"></span></div> <div class="right">Key faces</div><div class="clear"></div></div></a></li>
<li class="orange"><a href="#" data-jumpslide="5" ><div class="list-item one-liner"><div class="left"><span id="functionality-icon"></span></div> <div class="right">Functionalities</div><div class="clear"></div></div></a></li>
</ul>
そしてjQueryは次のとおりです。
$('a[data-jumpslide]').each(function(idx, ele){
$(ele).on('click', function(){
var slideToJump = $(this).data('jumpslide');
window.slider.go(false, slideToJump+1);
});
});
ご覧のとおり、リンクがクリックされるたびに、その特定のページのスライドが移動しました。
しかし、どのページでもスライダーを動かすことができるユニバーサル メニューを作成する必要がありました。したがって、私が「ページ 1」のページで、「ページ 2」の 7 番目のスライドのリンクをクリックすると、コードはページ 2 を開いてスライド 7 に移動する必要があります。
これは私がHTMLを変更した方法です:
<ul class="dropdown">
<li class="orange"><a href="page2.php" data-jumpslide="2" data-goto="page2"><div class="list-item one-liner"><div class="left"><span id="functionality-icon"></span></div> <div class="right">When to do it</div><div class="clear"></div></div></a></li>
<li class="orange"><a href="page2.php" data-jumpslide="2" data-goto="page2" ><div class="list-item one-liner"><div class="left"><span id="functionality-icon"></span></div> <div class="right">Key faces</div><div class="clear"></div></div></a></li>
<li class="orange"><a href="page2.php" data-jumpslide="2" data-goto="page2" ><div class="list-item one-liner"><div class="left"><span id="functionality-icon"></span></div> <div class="right">Functionalities</div><div class="clear"></div></div></a></li>
</ul>
これがjQueryの変更方法です。
$('a[data-jumpslide]').each(function(idx, ele){
$(ele).on('click', function(e){
e.preventDefault();
var href = $(this).attr('href');
var slideToJump = $(this).data('jumpslide');
var gotoPage = $(this).data('data-goto');
slideToJump++;
if (gotoPage != '') {
window.slider.go(false, slideToJump);
}
else {
var url = href+'#'+slideToJump;
window.location = url;
}
});
});
var hash = window.location.hash;
$(document).ready(function(idx, ele){
if (hash != '') {
window.setTimeout(function () {
window.slider.go(false, hash);
}, 2000);
}
else {
console.log("No hash found " + hash);
}
});
つまり、ユーザーが別のページ (ページ 2 など) に移動するリンクをクリックすると、リダイレクトされ、そこに到達した後、ページにハッシュがあるかどうかがチェックされます。存在する場合は、スライドをその番号に移動します。
これで、スライドが番号に移動しないことを除いて、すべて問題ありません。コードは同じですwindow.slider
が、スライダーを入れても動きません。
Slide Change Callback 関数で console.log を作成すると、「undefined」と表示されます。(以下のコード)
slideChangedCallBack: function(idx, slide) {
if (console) console.log('slideChangedCallBack: '+slide.data('pagename'));
if (s && s.t){
s.pageName = slide.data('pagename');
s.t();
}
...
}