質問編集履歴

2 コード修正

watadon111

watadon111 score 33

2018/05/29 12:58  投稿

横スクロールのコンテンツで、最後の要素が見えた時の処理
## 概要
横スクロールの可変(アイテムの数がリロードすると変わる)のコンテンツを作成しています。
枠内に数個のボックスがあり、
それが横並びになっていてoverflow-x: hiddenでスクロールができないようにしてあります。
次、前のボタンを押した時だけスクロールするようになっています。
## 困っているとこ
1.一番最初、つまり数個のボックスがまだスクロールされていない時、
または、枠内の一番左に一番最初の要素がある時は前ボタンを消す。
スクロールをして一番最後の要素が枠内に来たら次ボタンを消す。
### やって見たこと
ulの要素を取得してscrollLeftの値が0だったら前ボタンを出さないようにした。
しかし、次ボタンを押したタイミングでスクロールされた時に再度scrollLeftの値を見て
0以外だったら前ボタンを出現させるように書いたがうまくいかなかった。
次ボタンに関してはulの要素をとって、一番最後のxの位置を取得して
そこまで来たら次ボタンを消そうと思ったが、最後のxの位置がわからずうまくいかなかった。
2.スクロール量がわからない。
次ボタン、前ボタン押した時にスクロールさせたいが、
どうスクロールさせればいいのかわからない。
## コード
https://jsfiddle.net/wata/L1j6um1u/1/
https://jsfiddle.net/wata/L1j6um1u/1/
html
```
<div class="scrollContent" data-scroll-area="">
 <ul class="scrollContentList">
   <li class="scrollContentListItem" data-list-item="">
     <div class="itemWrapper">
       <p class="itemText">これはアイテムです。</p>
     </div>
   </li>
   <li class="scrollContentListItem" data-list-item="">
     <div class="itemWrapper">
       <p class="itemText">これはアイテムです。</p>
     </div>
   </li>
   <li class="scrollContentListItem" data-list-item="">
     <div class="itemWrapper">
       <p class="itemText">これはアイテムです。</p>
     </div>
   </li>
   <li class="scrollContentListItem" data-list-item="">
     <div class="itemWrapper">
       <p class="itemText">これはアイテムです。</p>
     </div>
   </li>
   <li class="scrollContentListItem" data-list-item="">
     <div class="itemWrapper">
       <p class="itemText">これはアイテムです。</p>
     </div>
   </li>
   <li class="scrollContentListItem" data-list-item="">
     <div class="itemWrapper">
       <p class="itemText">これはアイテムです。</p>
     </div>
   </li>
   <li class="scrollContentListItem" data-list-item="">
     <div class="itemWrapper">
       <p class="itemText">これはアイテムです。</p>
     </div>
   </li>
   <li class="scrollContentListItem" data-list-item="">
     <div class="itemWrapper">
       <p class="itemText">これはアイテムです。</p>
     </div>
   </li>
 </ul>
</div>
<div class="btns">
 <div class="prev" data-prev="">前</div>
 <div class="next" data-next="">次</div>
</div>
```
css
```
.scrollContent {
 width: 200px;
 height: 200px;
 border: 1px solid #ff0000;
 padding: 20px;
 overflow-x: scroll;
}
.scrollContentList {
 list-style-type: none;
 padding: 0;
 margin: 0;
 white-space: nowrap;
 display: inline-block;
}
.scrollContentListItem {
  display: inline-block;
  border: 1px solid #333333;
  width: 100px;
  white-space: normal;
}
.btns {
 margin-top: 50px;
}
.prev, .next {
 border: 1px solid #333333;
 display: inline-block;
}
```
js
```
const $scrollArea = $('[data-scroll-area]');
const item = document.querySelector('[data-list-item]');
const prev = document.querySelector('[data-prev]');
const next = document.querySelector('[data-next]');
if ($scrollArea[0].scrollLeft === 0) {
   prev.style.display = 'none';
} else {
   prev.style.display = 'inline-block';
}
prev.addEventListener('click', () => {
 $($scrollArea).animate({ scrollLeft: 0 }, 500, 'swing');
});
next.addEventListener('click', () => {
 $($scrollArea).animate({ scrollLeft: 200 }, 500, 'swing');
});
```
  • JavaScript

    26494 questions

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

1 タイトル修正

watadon111

watadon111 score 33

2018/05/29 12:57  投稿

[javascript]横スクロールのコンテンツで、最後の要素が見えた時の処理
横スクロールのコンテンツで、最後の要素が見えた時の処理
## 概要
横スクロールの可変(アイテムの数がリロードすると変わる)のコンテンツを作成しています。
枠内に数個のボックスがあり、
それが横並びになっていてoverflow-x: hiddenでスクロールができないようにしてあります。
次、前のボタンを押した時だけスクロールするようになっています。
## 困っているとこ
1.一番最初、つまり数個のボックスがまだスクロールされていない時、
または、枠内の一番左に一番最初の要素がある時は前ボタンを消す。
スクロールをして一番最後の要素が枠内に来たら次ボタンを消す。
### やって見たこと
ulの要素を取得してscrollLeftの値が0だったら前ボタンを出さないようにした。
しかし、次ボタンを押したタイミングでスクロールされた時に再度scrollLeftの値を見て
0以外だったら前ボタンを出現させるように書いたがうまくいかなかった。
次ボタンに関してはulの要素をとって、一番最後のxの位置を取得して
そこまで来たら次ボタンを消そうと思ったが、最後のxの位置がわからずうまくいかなかった。
2.スクロール量がわからない。
次ボタン、前ボタン押した時にスクロールさせたいが、
どうスクロールさせればいいのかわからない。
## コード
https://jsfiddle.net/wata/L1j6um1u/1/
  • JavaScript

    26494 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る