🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

JavaScript

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

HTML

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

Q&A

1回答

1628閲覧

リストページからリンク先にとび、リストページに戻った時にスクロール値を保持したい

mugichan

総合スコア4

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

スクロール

スクロールとは、ディスプレイスクリーン上において連続的にコンテンツが滑っていくことを指します。

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2019/11/07 08:07

編集2019/11/08 11:54

前提・実現したいこと

詳細ページへのリンクを設定した一覧ページを制作しています。
一覧の数が多いため、もっと見るボタンを設置しボタンを押すとさらに表示される仕様にしています。
詳細ページは同一窓で開くようにしたいです。
詳細ページには一覧ページにもどるためのリンクを設定しています。

詳細ページから、一覧ページにもどるボタンを押した時とブラウザバックで一覧に戻った時に、元のスクロール値を維持したいです。

https://teratail.com/questions/121347

こちらで解決されている方法で初期設定で表示されている一覧のリンク先はスクロール値が取れるのですが
選択タブと、もっと見るで表示されるリンクに飛んだ場合に、もっと見るを表示した状態を保持する方法がわからず困っております。

localStorageを使用しjsonで複数データの保存なども試したのですがうまくいきません、、、
javascriptは勉強中で色々な方のソースを参考に組み合わせているので
書いてる自分でももはやよくわからなくなってしまっています。
長くなってしまい分かりにくい文になってしまい恐縮ですが、良い方法があればどなたか教えてください。
よろしくお願いします。

html

1 <div class="serchBox"> 2 <ul id="Tab" class="nav nav-tabs"> 3 <li class="active"><a href="#tab1">tab1</a></li> 4 <li><a href="#tab2">tab2</a></li> 5 <li><a href="#tab3">tab3</a></li> 6 </ul> 7 </div> 8 9 <div class="tab-content"> 10 11 <div class="tab-pane active" id="tab1"> 12 <div class="box"><a href="#">詳細リンク</a></div> 13 <div class="box"><a href="#">詳細リンク</a></div> 14 <div class="box"><a href="#">詳細リンク</a></div> 15 <!-- /以下略 --> 16 <div id="more_btn">もっと見る <i class="fa fa-chevron-down" aria-hidden="true"></i></div> 17 <div id="close_btn">表示数を戻す <i class="fa fa-chevron-up" aria-hidden="true"></i></div> 18 </div> 19 20 <div class="tab-pane" id="tab2"> 21 <div class="box"><a href="#">詳細リンク</a></div> 22 <div class="box"><a href="#">詳細リンク</a></div> 23 <div class="box"><a href="#">詳細リンク</a></div> 24 <!-- /以下略 --> 25 <div id="more_btn">もっと見る <i class="fa fa-chevron-down" aria-hidden="true"></i></div> 26 <div id="close_btn">表示数を戻す <i class="fa fa-chevron-up" aria-hidden="true"></i></div> 27 </div> 28 29 <div class="tab-pane" id="tab3"> 30 <div class="box"><a href="#">詳細リンク</a></div> 31 <div class="box"><a href="#">詳細リンク</a></div> 32 <div class="box"><a href="#">詳細リンク</a></div> 33 <!-- /以下略 --> 34 <div id="more_btn">もっと見る <i class="fa fa-chevron-down" aria-hidden="true"></i></div> 35 <div id="close_btn">表示数を戻す <i class="fa fa-chevron-up" aria-hidden="true"></i></div> 36 </div> 37 38 </div>

javascript

1$(".tab-pane.active #close_btn").click(function() { 2 $(".tab-content>.active").find(".box:gt("+indexNum+")").slideUp(); 3 $(this).hide(); 4 $(".tab-pane.active #more_btn").show(); 5 }); 6/* ========================================================================== 7 絞り込みデフォルト表示用 8 ========================================================================== */ 9 $(function() { 10 var $numberListLen = $(".tab-content>.active .box").length; 11 var defaultNum = 20; 12 var addNum = 8; 13 var currentNum = 0; 14 15 $(".tab-content>.active").each(function() { 16 $(this).find("#more_btn").show(); 17 $(this).find("#close_btn").hide(); 18 $(this).find(".box:not(:lt("+defaultNum+"))").hide(); 19 20 currentNum = defaultNum; 21 22 $("#more_btn").click(function() { 23 currentNum += addNum; 24 25 $(".tab-content>.active").find(".box:lt("+currentNum+")").slideDown(); 26 27 if($numberListLen <= currentNum) { 28 currentNum = defaultNum; 29 indexNum = currentNum - 1; 30 31 $("#more_btn").hide(); 32 $("#close_btn").show(); 33 34 $("#close_btn").click(function() { 35 $(".tab-content>.active").find(".box:gt("+indexNum+")").slideUp(); 36 $(this).hide(); 37 $("#more_btn").show(); 38 }); 39 } 40 }); 41 }); 42 }); 43 44$('#Tab a').click(function (e) { 45 e.preventDefault(); 46 $(this).tab('show'); 47}); 48 49/* ========================================================================== 50 絞り込みタブ選択後表示用 51 ========================================================================== */ 52$(function () { 53$("#Tab a").click(function () { 54 55 $(".tab-pane.active").each(function() { 56 var $numberListLen = $(".tab-content>.active .box").length; 57 var defaultNum = 20; 58 var addNum = 8; 59 var currentNum = 0; 60 61 $(this).find("#more_btn").show(); 62 $(this).find("#close_btn").hide(); 63 $(this).find(".box:not(:lt("+defaultNum+"))").hide(); 64 65 currentNum = defaultNum; 66 67 $(".tab-pane.active #more_btn").click(function() { 68 currentNum += addNum; 69 70 $(".tab-content>.active").find(".box:lt("+currentNum+")").slideDown(); 71 72 if($numberListLen <= currentNum) { 73 currentNum = defaultNum; 74 indexNum = currentNum - 1; 75 76 $(".tab-pane.active #more_btn").hide(); 77 $(".tab-pane.active #close_btn").show(); 78 79 $(".tab-pane.active #close_btn").click(function() { 80 $(".tab-content>.active").find(".box:gt("+indexNum+")").slideUp(); 81 $(this).hide(); 82 $(".tab-pane.active #more_btn").show(); 83 }); 84 } 85 }); 86 }); 87}); 88}); 89 90/* ========================================================================== 91 ローカルストレージ 92 ========================================================================== */ 93$(".tab-content>.active a").click(function(){ 94 var scrollPos= $(document).scrollTop(); 95localStorage.setItem('key',scrollPos); 96}); 97$(document).ready(function(){ 98var pos = localStorage.getItem('key'); 99$('html,body').animate({ scrollTop: pos }, 'slow'); 100localStorage.clear(); 101}); 102

------------------------------追記------------------------------

質問の範囲が広すぎました。すみません。
・スクロール値を保持
・liのアクティブを保持
・もっと見るのカウントを保持
この3つに分けてまずは試してみようと思います!

上記のJSの下に下記を追記して、liのアクティブを保持はできたのですが、そうするともっと見るのボタンが機能せず、全件表示の状態となってしまいます。
書き方や順番など変えてみたのですがうまくいきません。。。
また、一応アクティブを保持はできているのですが似たような記述を繰り返している気がするので、もっと他に書き方などありましたら教えて頂きたいです。
よろしくお願いします。

javascript

1$(window).on('click',function(){ 2 $("#Tab li.active a").each(function() { 3 var activeli2 = $('#Tab li.active a').index('#Tab li a'); 4 localStorage.setItem('key',activeli2); 5 console.log(activeli2 + '番目を選択'); 6 }); 7}); 8 9 $(window).on('load',function(){ 10 var ref = document.referrer; 11 var domein = "sample.com"; 12 if(ref.indexOf('sample') != -1&&document.URL.match(/sample/)){ 13 var pos = localStorage.getItem('key'); 14 console.log(pos + '番目を選択'); 15 $('#Tab li').removeClass('active'); 16 $('.tab-content>.tab-pane').removeClass('active'); 17 $('#Tab li:eq(' + pos + ')').addClass('active'); 18 $('.tab-content>.tab-pane:eq(' + pos + ')').addClass('active'); 19 20 if(!($('.active').length)){ 21 $('#Tab li').eq(0).addClass('active'); 22 $('.tab-content>.tab-pane').eq(0).addClass('active'); 23 } 24 localStorage.clear(); 25 } 26 });

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

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

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

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

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

2KOH

2019/11/09 05:40

悪いですが、追記に関しても答えられる質問内容になっていません。 「行数が100行を超えていて、かつ書いた本人すらよくわからなくなっているコードの中からバグを見つけてくれ」と言われても、少なくとも自分はやりたくありません。 回答がほしいなら、わからないことを順番に尋ねていくのではなく、わからないところを本題でない部分を全部削ぎ落としてこれ以上小さくできないところまで小さくした上で尋ねてください。 それができないなら、100行を超えているスパゲッティコードの中から無償でバグを見つけてくれるような奇特な人が現れるのを気長に待つか、このサイトで回答を得るのは諦めてください。
mugichan

2019/11/11 01:49

ですよね。 私も依頼される側だったら答えにくいだろうなと思いつつ自力では難しそうだったので何かヒントをもらえたらと思って質問してみたのですが、そんなに不快にさせてしまったのならすみません。 localstoragで何度か何度か試したのですがもう一歩という感じの所まで来たので何とかなりそうです! この方法でいけそうと教えて頂いただけでもだいぶ進んだのでよかったです! 次回質問するときは、もっとわかりやすく要約するように気を付けます。 ありがとうございました!
guest

回答1

0

やり方としては localStorage を使う方法で実現可能だと思います。

  1. 詳細ページに飛ぶ前に、どれだけもっと見るボタンが押されたかの値を localStorage に保存する。
  2. 一覧ページを表示するときに、localStorage からどれだけもっと見るボタンが押されたかの値を取得し、その値を元にもっと見るを表示した状態を復元する。

これ以上の具体的な方法は、この質問では答えられません。
具体的なサンプルコードを書くには質問範囲が広すぎて完全に丸投げ状態ですし、書いた本人ですらわからなくなっているようなコードを元にサンプルコードを書くというのも無茶です。

答えられる内容で質問し直してください。

あと、コード部分は markdown記法を使ってください。

投稿2019/11/07 23:21

2KOH

総合スコア999

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

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

mugichan

2019/11/08 08:07

markdown記法というものがあるのですね。markdown記法に修正しました。教えて頂きありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問