質問
Webページ内にあるボタンを選択したら、指定されたサムネイル付きスライダーがモーダルで表示される(Lightbox)といった表示を実装したいと考えています。
①ページ内にモーダルウィンドウを制御するボタンを複数用意
↓
②任意のボタンを選択
↓
③指定したメインスライドとサムネイルがアクティブ表示される(例:②で2番目のボタンを選択したら、③では2つ目のメインスライドとそのサムネイルがアクティブで表示される)
④閉じるボタン もしくは、モーダルウィンドウコンテンツ外のエリアを選択するとモーダルウィンドウが閉じる
モーダルウィンドウ単体、サムネイル付きスライダー単体での実装はremodal.jsやslick.jsなどを使った経験はあるものの、いくら調べても全く分からなかったので質問させていただきました。
現状のjsの知見は、ライブラリベースで何とか構築できる程度です。
恐れ入りますが、どなたかお教えいただけると大変ありがたいです。
よろしくお願いいたします。
試したこと
・調査(インターネット検索)
・実装
検証中で最も実装に近い??ソース
外部でライブラリを読み込んでいます。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>##実装中のコード
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Page Title</title> <meta name="description" content=""> <meta name="keywords" content=""> <link rel="stylesheet" type="text/css" href="/shared/css/slick/slick.css"> <link rel="stylesheet" type="text/css" href="/shared/css/slick/slick-theme.css"> <style> body { background-color: #333; color: #ccc; text-align: center; } body a, body a:visited { color: #ccc; text-decoration: none; } body a:hover { color: #aaa; } .container { position: relative; margin: 0 auto; height: 40vw; display: flex; justify-content: center; opacity: 0; animation: mainFadeIn 2s forwards 1.8s; } .main-slider { position: relative; width: calc(100vw - 26vw); height: 100%; overflow: hidden; } .main-slider .slide { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .main-slider .slide:target { z-index: 3; animation: show 1.2s; } .main-slider .slide:target:first-of-type { z-index: 3; } .main-slider .slide:target:first-of-type .meta { transform: translateX(-50px); filter: blur(5px); opacity: 0; } .main-slider .slide:target .meta { animation: showMeta 1.2s ease 0.9s forwards; } .main-slider .slide:not(:target):not(:first-of-type) { animation: hide 1.2s ease; } .main-slider .slide:not(:target):not(:first-of-type) .meta { animation: hideMeta 1s ease forwards; } .main-slider .slide:first-of-type { z-index: 1; } .main-slider .slide:first-of-type .meta { transform: translateX(0); filter: blur(0); opacity: 1; } .main-slider .slide .meta { position: absolute; top: calc(50% - 19px); left: 0; padding: 0 40% 0 2.4vw; color: #fff; text-align: left; transform: translateX(-50px); filter: blur(5px); opacity: 0; } .main-slider .slide .meta .title { font-size: 38px; font-weight: 800; } .main-slider .slide .meta .desc { margin-top: 20px; font-size: 15px; } .thumbnail-slider { position: relative; width: 26vw; height: 100%; line-height: 0; overflow-y: auto; } .thumbnail-slider::-webkit-scrollbar { width: 5px; } .thumbnail-slider::-webkit-scrollbar-track { background-color: rgba(255, 255, 255, 0.28); } .thumbnail-slider::-webkit-scrollbar-thumb { background-color: rgba(255, 255, 255, 0.44); } .thumbnail-slider .slide { position: relative; height: 20%; overflow: hidden; } .thumbnail-slider .slide:hover figure img { transform: scale(1.1); } .thumbnail-slider .slide figure img { transition: transform 0.5s; } .slide figure { height: 100%; } .slide figure img { position: relative; width: 100%; height: 100%; object-fit: cover; } @keyframes mainFadeIn { to { opacity: 1; } } @keyframes show { 0% { transform: translateX(-100%); } 100% { transform: translateX(0); } } @keyframes hide { 0% { z-index: 2; } 100% { z-index: 2; } } @keyframes showMeta { 0% { transform: translateX(-50px); filter: blur(5px); opacity: 0; } 100% { transform: translateX(0); filter: blur(0); opacity: 1; } } @keyframes hideMeta { 0% { transform: translateX(0); filter: blur(0); opacity: 1; } 100% { transform: translateX(-50px); filter: blur(5px); opacity: 0; } } /*modal*/ .content{ margin: 0 auto; padding: 40px; } .modal{ display: none; height: 100vh; position: fixed; top: 0; width: 100%; } .modal__bg{ background: rgba(0,0,0,0.8); height: 100vh; position: absolute; width: 100%; } .modal__content{ background: #fff; left: 50%; padding: 40px; position: absolute; top: 50%; transform: translate(-50%,-50%); width: 60%; } /*add css*/ .text-slider { display: flex; } .text-slider li { padding-left: 20px; list-style: none; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <!-- <script type="text/javascript" src="/shared/js/slick.min.js"></script> --> <script> $(function(){ $('.js-modal-open').on('click',function(){ $('.js-modal').fadeIn(); return false; }); $('.js-modal-close').on('click',function(){ $('.js-modal').fadeOut(); return false; }); }); </script> </head> <body></div><!--modal__inner--> </div><!--modal--> </body> </html><div class="content"> <ul class="text-slider" id="txt"> <li class="slide"> <a class="js-modal-open" id="thisone1" href="#slide-1">指定スライド1</a> </li> <li class="slide"> <a class="js-modal-open" id="thisone2" href="#slide-2">指定スライド2</a> </li> <li class="slide"> <a class="js-modal-open" id="thisone3" href="#slide-3">指定スライド3</a> </li> <li class="slide"> <a class="js-modal-open" id="thisone4" href="#slide-4">指定スライド4</a> </li> </ul> </div> <div class="modal js-modal"> <div class="modal__bg js-modal-close"></div> <div class="modal__content"> <div class="container"> <ul class="main-slider" id="room"> <li class="slide" id="slide-1"> <figure><img src="https://drive.google.com/uc?export=view&id=1sRjMAeYv2axSKgRPtLHyk7LaHne8K4oq" /></figure> <div class="meta"> <p class="title">Elisa Cannon</p> <p class="desc">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </li> <li class="slide" id="slide-2"> <figure><img src="https://drive.google.com/uc?export=view&id=1Ido1e59DT4GltXbmnTEmfJjkGdLwslZK" /></figure> <div class="meta"> <p class="title">Salvatore Wilson</p> <p class="desc">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </li> <li class="slide" id="slide-3"> <figure><img src="https://drive.google.com/uc?export=view&id=1eGcqYmliPjIdxGXxyk2BrC4-KtOtFXK9" /></figure> <div class="meta"> <p class="title">Suzanne Flowers</p> <p class="desc">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </li> <li class="slide" id="slide-4"> <figure><img src="https://drive.google.com/uc?export=view&id=1p7Akjvwh-yMhErDMvDFKb7YxpERMMXtX" /></figure> <div class="meta"> <p class="title">Evelyn Sanchez</p> <p class="desc">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </li> </ul> <nav role="navigation"> <ul class="thumbnail-slider" id="thmb"> <li class="slide"> <a href="#slide-1"> <figure><img src="https://drive.google.com/uc?export=view&id=1sRjMAeYv2axSKgRPtLHyk7LaHne8K4oq" /></figure> </a> </li> <li class="slide"> <a href="#slide-2"> <figure><img src="https://drive.google.com/uc?export=view&id=1Ido1e59DT4GltXbmnTEmfJjkGdLwslZK" /></figure> </a> </li> <li class="slide"> <a href="#slide-3"> <figure><img src="https://drive.google.com/uc?export=view&id=1eGcqYmliPjIdxGXxyk2BrC4-KtOtFXK9" /></figure> </a> </li> <li class="slide"> <a href="#slide-4"> <figure><img src="https://drive.google.com/uc?export=view&id=1p7Akjvwh-yMhErDMvDFKb7YxpERMMXtX" /></figure> </a> </li> </ul> </nav> </div> <a class="js-modal-close" href="">閉じる</a>

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。