質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

801閲覧

「barba.js」でボタンを指定したい

minminzemkun

総合スコア14

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/09/20 14:37

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

FAQに無効にしたい場合の記述が載っています。
http://barbajs.org/faq.html

和訳
https://tr.you84815.space/barba/faq.html

-- id="hoge"だけ有効にする例を追加

JavaScript

1Barba.Pjax.originalPreventCheck = Barba.Pjax.preventCheck; 2Barba.Pjax.preventCheck = function(evt, element) { 3 if (!Barba.Pjax.originalPreventCheck(evt, element)) { 4 return false; 5 } 6 7 if (element.id === 'hoge') { 8 return true; 9 } 10 11 return false; 12};

投稿2018/09/21 00:41

編集2018/09/25 07:30
x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minminzemkun

2018/09/21 00:43

ありがとうございます。ただ今回は、発動したい<a>タグを指定したいのです。
minminzemkun

2018/09/21 00:44

無効にする方法でなく、有効にする方法ということです。また何か見つかったらお願い致します。
x_x

2018/09/21 00:57

同じことだと思いますが……
minminzemkun

2018/09/21 01:56

お気持ち分かります。論理的には仰る通りですもんね。しかし現実的には手間の違いが生じます。 すなわち、無効にしたい対象が100個で有効にしたい対象が1個であるとき、後者を指定する方が手間が減りますよね。 今回もこのケースで、無効にしたい対象はロゴや記事一覧など多すぎるのに対して、有効にしたい対象はページ番号だけでいいのです。
x_x

2018/09/21 02:01

リンク先は見たのでしょうか? 何も考えずにreturn false;とすればすべてが無効になりますよね?
minminzemkun

2018/09/21 10:57

そうなんですね。もう一歩踏み込んで頂いて、具体的にはどのようにすべきでしょうか?
minminzemkun

2018/09/25 07:46

「return true;」なんて初めて見ました。「return false;」しかないものだとばかり…笑 お手数おかけして申し訳ございません。 たびたびのご返信ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問