質問編集履歴

2

クロージャを導入して一部コード修正しました。

2019/12/22 15:17

投稿

onigiri-sake
onigiri-sake

スコア11

test CHANGED
File without changes
test CHANGED
@@ -10,13 +10,29 @@
10
10
 
11
11
 
12
12
 
13
+ <追記>
14
+
15
+ 一部修正しました。関数内に変数を閉じ込めると関数実行の度に変数が宣言され、値がリセットされてしまっていると考え、クロージャにて再度実装しました。
16
+
17
+
18
+
13
19
  ### 発生した問題・解決したい問題
14
20
 
15
- 変数を関数スコープかイベントの中に閉じ込めたいのですが、イベント内・関数内に閉じようとしたらうまく動作しない。
21
+ ~~変数を関数スコープかイベントの中に閉じ込めたいのですが、イベント内・関数内に閉じようとしたらうまく動作しない。~~
16
22
 
17
23
  関数・イベントの外で宣言したら動作しました。
18
24
 
19
25
  おかしいところのアドバイスを頂きたいです。
26
+
27
+
28
+
29
+ <追記>
30
+
31
+ クロージャにて一部コード修正しましたが、機能しません。
32
+
33
+ クロージャの扱いが間違っているのか、その他の要因があるのか、アドバイスを頂きたいです。
34
+
35
+
20
36
 
21
37
 
22
38
 
@@ -50,31 +66,43 @@
50
66
 
51
67
  $(function(){
52
68
 
53
- (function(){
69
+ /**
54
70
 
55
- var slideWidth = $('.slider-list').find('li').width(),  //スライド一つの幅
71
+ *スライド全体を横に移動させる
56
72
 
57
- slideNum = $('.slider-list').find('li').length,    //スライド
73
+ *左端までいくと最後画像に移動する
58
74
 
59
- slideListWidth = slideWidth * slideNum,        //スライド全体
75
+ *右端までいくと最初画像に戻る
60
76
 
61
- slideCurrent = 0;                    //スライドの現在地
77
+ *
62
78
 
63
- $('.slider-list').css('width',slideListWidth);
79
+ *@param {num} current : 現在地の増減
64
80
 
65
- })();
81
+ */
66
82
 
83
+ function slideShow(){
67
84
 
85
+ let slideWidth = $('.slider-list').find('li').width(),
68
86
 
69
- function slide(num){                       //スライドショーの関数
87
+ slideNum = $('.slider-list').find('li').length,
70
88
 
71
- var slideWidth = $('.slider-list').find('li').width(),
89
+ slideListWidth = slideWidth * slideNum,
72
90
 
73
- slideNum = $('.slider-list').find('li').length,
91
+ slideCurrent = 0,
74
92
 
75
- slideCurrent = 0;
93
+ myObj = new Object();
76
94
 
95
+ /**
96
+
97
+ *スライド全体の幅を挿入する
98
+
99
+ */
100
+
101
+ $('.slider-list').css('width',slideListWidth);
102
+
103
+ myObj.slideFunc = function (current){
104
+
77
- num
105
+ current;
78
106
 
79
107
  if(slideCurrent < 0){
80
108
 
@@ -96,92 +124,46 @@
96
124
 
97
125
  }
98
126
 
127
+ myObj.getCurrent = function (){
128
+
129
+ return slideCurrent;
130
+
131
+ }
132
+
133
+ return myObj;
134
+
135
+ }
136
+
137
+ let slideCount = slideShow();
99
138
 
100
139
 
101
- $('.slider-area').find('button').on('click',function(){   //ボタンクリック時のイベント
102
140
 
103
- var slideCurrent = 0;
141
+ /**
104
142
 
105
- if($(this).hasClass('next')){
143
+ *クリックイベント
106
144
 
107
- slide(slideCurrent++)
145
+ *ボタンクリックで進む・戻る
108
146
 
109
- }
147
+ */
110
148
 
111
- else{
149
+ $('.slider-area').find('button').on('click',function(){
112
150
 
113
- slide(slideCurrent--)
151
+ let currentCount = slideCount.getCurrent();
114
152
 
115
- }
153
+ if($(this).hasClass('next')){
116
154
 
155
+ slideCount.slideFunc(currentCount++)
156
+
157
+ }
158
+
159
+ else{
160
+
161
+ slideCount.slideFunc(currentCount--)
162
+
163
+ }
164
+
117
- });
165
+ });
118
166
 
119
167
  });
120
168
 
121
169
  ```
122
-
123
- ↑動作しない
124
-
125
- ```javascript
126
-
127
- $(function(){
128
-
129
- var slideWidth = $('.slider-list').find('li').width(),  //スライド一つの幅
130
-
131
- slideNum = $('.slider-list').find('li').length,    //スライドの数
132
-
133
- slideListWidth = slideWidth * slideNum,        //スライド全体の幅
134
-
135
- slideCurrent = 0;                    //スライドの現在地
136
-
137
- $('.slider-list').css('width',slideListWidth);
138
-
139
-
140
-
141
- function slide(num){                       //スライドショーの関数
142
-
143
- num
144
-
145
- if(slideCurrent < 0){
146
-
147
- slideCurrent = slideNum -1;
148
-
149
- }
150
-
151
- else if(slideCurrent > slideNum -1){
152
-
153
- slideCurrent = 0;
154
-
155
- }
156
-
157
- $('.slider-list').animate({
158
-
159
- left : slideCurrent * -slideWidth
160
-
161
- });
162
-
163
- }
164
-
165
-
166
-
167
- $('.slider-area').find('button').on('click',function(){   //ボタンクリック時のイベント
168
-
169
- if($(this).hasClass('next')){
170
-
171
- slide(slideCurrent++)
172
-
173
- }
174
-
175
- else{
176
-
177
- slide(slideCurrent--)
178
-
179
- }
180
-
181
- });
182
-
183
- });
184
-
185
- ```
186
-
187
- ↑動作する

1

ご指摘いただいた点の本文を修正しました。

2019/12/22 15:17

投稿

onigiri-sake
onigiri-sake

スコア11

test CHANGED
File without changes
test CHANGED
@@ -12,9 +12,9 @@
12
12
 
13
13
  ### 発生した問題・解決したい問題
14
14
 
15
- グローバル変数が使用不可のた変数をイベント内・関数内に閉じようとしたらうまく動作しない。
15
+ 変数を関数スコープかイベント中に閉じ込めいのですが、イベント内・関数内に閉じようとしたらうまく動作しない。
16
16
 
17
- グローバル変数で宣言したら動作しました。
17
+ ・イベントの外で宣言したら動作しました。
18
18
 
19
19
  おかしいところのアドバイスを頂きたいです。
20
20