「barba.js」の導入についてですが、
どの<a>タグをクリックしたときに「barba.js」を発動させるか、を指定する方法がわかりません。
ページ番号の<a>タグだけでいいのに、ロゴや記事一覧など他の<a>タグでも発動してしまい困っています。
発動したい<a>タグを指定する方法はありませんでしょうか?
(発動したくない<a>タグなら「.no-barba」とClassを付ければいいだけですがそれではロゴや記事一覧など対象が多すぎるので、発動したい<a>タグを指定したいのです。)
方法をご存知の方はいらっしゃいませんでしょうか。
尚、特に必要ないと思いますが現状はWordPressを使い利用コードは下記です。
javascript
1// 現在と同じページのリンクをクリックした場合、リロードをしない設定 2var links = document.querySelectorAll('a[href]'); 3var cbk = function(e) { 4 if(e.currentTarget.href === window.location.href) { 5 e.preventDefault(); 6 e.stopPropagation(); 7 } 8}; 9for(var i = 0; i < links.length; i++) { 10 links[i].addEventListener('click', cbk); 11} 12 13// 新しいページが準備できたときにしたい処理 14Barba.Dispatcher.on('newPageReady', function(currentStatus, oldStatus, container, newPageRawHTML) { 15 16 if ( Barba.HistoryManager.history.length === 1 ) { // ファーストビュー 17 return; 18 } 19 20 // メタデータをリフレッシュ 21 var head = document.head; 22 var newPageRawHead = newPageRawHTML.match(/<head[^>]*>([\s\S.]*)</head>/i)[0]; 23 var newPageHead = document.createElement('head'); 24 newPageHead.innerHTML = newPageRawHead; 25 var removeHeadTags = [ 26 "meta[name='keywords']" 27 ,"meta[name='description']" 28 ,"meta[property^='fb']" 29 ,"meta[property^='og']" 30 ,"meta[name^='twitter']" 31 ,"meta[itemprop]" 32 ,"link[itemprop]" 33 ,"link[rel='prev']" 34 ,"link[rel='next']" 35 ,"link[rel='canonical']" 36 ].join(','); 37 var headTags = head.querySelectorAll(removeHeadTags) 38 for(var i = 0; i < headTags.length; i++ ){ 39 head.removeChild(headTags[i]); 40 } 41 var newHeadTags = newPageHead.querySelectorAll(removeHeadTags) 42 for(var i = 0; i < newHeadTags.length; i++ ){ 43 head.appendChild(newHeadTags[i]); 44 } 45 46 // Google Analyticsにヒットを送信 47 ga('send', 'pageview', location.pathname); 48 49 // document.wiriteを含む外部スクリプトを動かす 50 var scripttag = document.querySelectorAll('script'); 51 // scriptそれぞれに処理 52 scripttag.forEach(function(script, i) { 53 getWritten(script.src, function(html){ 54 var div = document.createElement('div'); 55 div.className = 'inrjs'; 56 div.innerHTML = html; 57 script.after(div); 58 }); 59 }); 60 61}); // End Dispatcher 62 63// ページ遷移トランジション 64var FadeTransition = Barba.BaseTransition.extend({ 65 start: function() { 66 67 // ローディングが終わるとすぐ古いページをフェードアウトさせて、新しいページをフェードイン 68 Promise 69 .all([this.newContainerLoading, this.fadeOut()]) 70 .then(this.fadeIn.bind(this)); 71 }, 72 73 fadeOut: function() { 74 return $(this.oldContainer).animate({ opacity: 0 }, { duration: 150, easing: 'swing', }).promise(); 75 }, 76 77 fadeIn: function() { 78 // ページトップに移動(これがないとスクロールしたところのまま画面遷移する) 79 // jQueryで書く場合は $(document).scrollTop(0); 80 document.body.scrollTop = 0; 81 82 var _this = this; 83 84 // newContainerはnewContainerLoadingを解決した後に利用できる 85 var $el = $(this.newContainer); 86 87 // 古いコンテナ 88 $(this.oldContainer).hide(); 89 90 // 新たに読み込まれるbarba-containerの初期設定 91 // visiblityはデフォルトhiddenなのでvisibleに変える 92 $el.css({ 93 visibility : 'visible', 94 opacity : 0 95 }); 96 97 $el.animate({ opacity: 1 }, 200, function() { 98 // 遷移が終了したら.done() 99 // .done()は自動的にDOMから古いコンテナを削除する 100 _this.done(); 101 }); 102 } 103}); 104 105// Barbaに作成した遷移処理を指定 106Barba.Pjax.getTransition = function() { 107 return FadeTransition; 108}; 109 110// barbajsをON にする 111// PrefetchをON にする 112$().ready(function(){ 113 Barba.Pjax.start(); 114 Barba.Prefetch.init(); 115}); 116 117// ページ読み込み時にdocument.writeが書かれている外部スクリプトは 118// 読み込まれないので、iframe上に一時的にwriteしてコールバックを受け取る 119function getWritten(fileName, callback) { 120 var $iframe = $("<iframe hidden/>"); 121 // iframe が DOM 上に存在しないとうまくいかないので一時的に出力する 122 $iframe.appendTo("body"); 123 var frameDocument = $iframe[0].contentWindow.document; 124 var scriptTag = "<script src=\"" + fileName + "\"></script>"; 125 frameDocument.open(); 126 // frame 内での window.setResult に結果受信用関数を作成する 127 $iframe[0].contentWindow.setResult = function(html) { 128 // 親フレーム上から用済みの iframe を除去する 129 $iframe.remove(); 130 // 取得した文字列には scriptTag が含まれているので削除してコールバックに渡す 131 callback(html.replace(scriptTag, "")); 132 }; 133 frameDocument.write( 134 "<div id=\"area-to-write\">" + 135 // div タグ内に scriptTag を貼る 136 scriptTag + 137 "</div>" + 138 "<script>" + 139 // div タグ内に出力された文字列を setResult() に渡す 140 "setResult(document.querySelector(\"#area-to-write\").innerHTML);" + 141 "</script>" 142 ); 143 frameDocument.close(); 144}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/21 00:43
2018/09/21 00:44
2018/09/21 00:57
2018/09/21 01:56
2018/09/21 02:01
2018/09/21 10:57
2018/09/25 07:46