回答編集履歴

2

回答追記

2023/06/17 22:15

投稿

退会済みユーザー
test CHANGED
@@ -36,3 +36,87 @@
36
36
  });
37
37
  });
38
38
  ```
39
+
40
+ ### 追記
41
+
42
+ コメントから
43
+
44
+ > 可能であれば、最初にis-hiddenで非表示になったitemを、 任意の数ずつ表示させるようにしたいと考えていました。
45
+
46
+ とのことでしたので、
47
+
48
+ > 任意の数ずつ表示
49
+
50
+ できるように修正し、あわせて、いくつかまとまった処理を関数化したものを以下に挙げておきますので、使えそうな部分があれば参考にしてください。
51
+
52
+ #### HTML への追加
53
+
54
+ 閉じるための `<span>` を以下のように View More の後に追加します。初期状態は非表示なので`is-hidden`をCSSクラスに入れておきます。
55
+
56
+ ```diff
57
+ </ul>
58
+ <span class="item__box--more">View More</span>
59
+ + <span class="item__box--close is-hidden">Close</span>
60
+ </div>
61
+ ```
62
+ #### javascript 修正案
63
+
64
+ - 初期表示での件数、View Moreをクリックするごとに追加表示する件数の定数名を `FIRST_VIEW` と `ADD_ITEMS` にしました。
65
+ - HTML要素の配列を引数にとり、これらの表示、非表示を設定する処理を関数 `show` と `hide` にしました。
66
+ - `.item__box` に対する設定を関数 `itemBoxSetting` にしました。
67
+
68
+ ```javascript
69
+ const FIRST_VIEW = 5;
70
+ const ADD_ITEMS = 3;
71
+
72
+ const hide = (elements) => {
73
+ elements.forEach(elm => {
74
+ elm.classList.add('is-hidden');
75
+ });
76
+ };
77
+
78
+ const show = (elements) => {
79
+ elements.forEach(elm => {
80
+ elm.classList.remove('is-hidden');
81
+ });
82
+ };
83
+
84
+ const itemBoxSetting = (box) => {
85
+ const items = box.querySelectorAll('.item__box--item');
86
+ const moreView = box.querySelector('.item__box--more');
87
+ const closeView = box.querySelector('.item__box--close');
88
+
89
+ if (items.length <= FIRST_VIEW) {
90
+ hide([moreView]);
91
+ return;
92
+ }
93
+
94
+ hide([...items].slice(FIRST_VIEW));
95
+
96
+ moreView.addEventListener('click', () => {
97
+ const hiddenItems = box.querySelectorAll('.item__box--item.is-hidden');
98
+ if (hiddenItems.length > 0) {
99
+ show([...hiddenItems].slice(0, ADD_ITEMS));
100
+ if (hiddenItems.length - ADD_ITEMS <= 0) {
101
+ hide([moreView]);
102
+ }
103
+ show([closeView]);
104
+ }
105
+ });
106
+
107
+ closeView.addEventListener('click', () => {
108
+ hide([...items].slice(FIRST_VIEW));
109
+ hide([closeView]);
110
+ show([moreView]);
111
+ });
112
+ }
113
+
114
+ document.addEventListener('DOMContentLoaded', () => {
115
+ document.querySelectorAll('.item__box').forEach(itemBoxSetting);
116
+ });
117
+ ```
118
+ - codepen: https://codepen.io/t4tikk3x/pen/OJaNZEb
119
+
120
+
121
+
122
+

1

コード修正

2023/06/17 02:00

投稿

退会済みユーザー
test CHANGED
@@ -30,7 +30,7 @@
30
30
  [...items].slice(firstView).forEach(item => {
31
31
  item.classList.add('is-hidden');
32
32
  });
33
- moreView.textContent = 'View moreView';
33
+ moreView.textContent = 'View More';
34
34
  }
35
35
  });
36
36
  });