teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

ソースコードのサンプル変更、自動生成を想定したコードにしました。

2018/05/18 00:49

投稿

kumakuma112
kumakuma112

スコア21

title CHANGED
File without changes
body CHANGED
@@ -4,43 +4,156 @@
4
4
 
5
5
  # メンテしやすい&見やすいコードにするためには?
6
6
  プラグインではないのですが、クラス名を毎回書くのがなんかしっくり来てないです。
7
- いざ、定数のように扱おうと思うと、セレクターとaddClassでドット入れる入れないという問題もあり、どこまでやるのが、メンテしやすい&見やすいソースコードになるのか、わからないです。
7
+ いざ、定数のように扱おうと思うと、
8
8
 
9
+ $(〜〜)とaddClassでドットありなしが混在するため、
10
+ うまくまとめられないくてどうしたものかと考えてました。
11
+ メンテしやすい&見やすいソースコードになるのか、わからないです。
12
+
13
+ Selectorに$("#slider").find(".slider_control")とかをまとめて書くのがスッキリするのですが、
14
+ ドットやコントロール系を自動生成にしたいため、最初に書くとfindで見つからなくて怒られます。
15
+
9
16
  ```JS
17
+ "use strict";
18
+ /* ========================================================
19
+ // NOTE スライダー04
20
+ ======================================================== */
10
21
  $(function(){
11
22
 
23
+
12
24
  // NOTE セレクター
25
+ // jQueryオブジェクトをキャッシュ
13
26
  var Selector = {
14
- TARGET : '#slider',
27
+ TARGET : $('#slider')
15
- VIEW : '.slider_view_item',
16
- NAV : '.slider_nav_item',
17
- PREV : '.slider_control_item-prev',
18
- NEXT : '.slider_control_item-next'
19
28
  }
20
29
 
30
+
21
- // NOTE クラス名(ステート)
31
+ // NOTE クラス名
22
32
  var ClassName = {
23
- ACTIVE : 'is-active'
33
+ ACTIVE : 'is-active',
34
+ CONTAINER : 'slider',
35
+ VIEW : 'slider_view',
36
+ ITEM : 'slider_view_item',
37
+ NAV : 'slider_nav',
38
+ DOT : 'slider_nav_item',
39
+ CONTROL : 'slider_control',
40
+ BUTTON : 'slider_control_item',
41
+ PREV : 'slider_control_item-prev',
42
+ NEXT : 'slider_control_item-next'
24
43
  }
25
44
 
45
+
46
+ // NOTE テンプレート
47
+ var Html = {
48
+ DOT : '<button class="' + ClassName.DOT + '" type="button" data-role="none" role="button"></button>',
49
+ PREV : '<button class="' + ClassName.BUTTON + ClassName.PREV + '" type="button" data-role="none" role="button"></button>',
50
+ NEXT : '<button class="' + ClassName.BUTTON + ClassName.NEXT + '" type="button" data-role="none" role="button"></button>'
51
+ }
52
+
53
+
54
+ // NOTE 現在地を確認する変数
55
+ var index = 1;
56
+
57
+
58
+ // NOTE スライダーの数
59
+ var count = $(ClassName.ITEM).length;
60
+
61
+
26
- //NOTE 設定
62
+ // NOTE 設定
27
63
  function init(){
28
64
 
65
+ // NOTE スライド要素にクラスを追加
29
- $(Selector.TARGET).addClass('slider');
66
+ Selector.TARGET.children().each(function(){
67
+ $(this).addClass(ClassName.ITEM);
68
+ });
30
69
 
70
+ // NOTE #sliderにクラスを追加と親タグを用意
71
+ Selector.TARGET
72
+ .addClass(ClassName.CONTAINER)
73
+ .wrapInner('<div class="' + ClassName.VIEW + '">')
74
+ .append('<div class="' + ClassName.NAV + '"/>')
75
+ .append('<div class="' + ClassName.CONTROL + '"/>');
76
+
77
+ // NOTE ドットナビを生成
78
+ console.log(Selector.TARGET.find(ClassName.ITEM));
31
- $(Selector.TARGET).children().each(function(i){
79
+ Selector.TARGET.find(ClassName.ITEM).each(function(i){
80
+ Selector.TARGET.find(ClassName.NAV).append(Html.DOT);
32
- $(this).addClass('slider_view_item');
81
+ $(ClassName.DOT).on("click",function(){
82
+ view(i + 1);
83
+ });
33
84
  });
34
85
 
35
- $(Selector.TARGET).wrapInner('<div class="slider_view">');
86
+ // NOTE 矢印コントローラーを生成
87
+ Selector.TARGET
88
+ .find(ClassName.CONTROL)
89
+ .append(Html.PREV)
90
+ .append(Html.NEXT);
36
91
 
92
+ $(ClassName.BUTTON).each(function(i){
93
+ $(ClassName.PREV).on("click",function(){
94
+ view(i - 1);
37
- ~~~~
95
+ });
96
+ $(ClassName.NEXT).on("click",function(){
97
+ view(i + 1);
98
+ });
99
+
100
+ });
38
101
 
102
+ // NOTE 最初に1回だけ実行
103
+ view(index);
104
+
39
105
  }
40
106
 
107
+
108
+
109
+ // NOTE 更新が必要なモジュールをアップデート
110
+ function view(val){
111
+
112
+ index = val;
113
+
114
+ // スライド画像を更新
115
+ console.log($(ClassName.ITEM));
116
+ $(ClassName.ITEM)
117
+ .hide()
118
+ .each(function(i){
119
+ if(index == i + 1){
120
+ $(this).show();
121
+ return false;
122
+ }
123
+ });
124
+
125
+ // ドットのナビを更新
126
+ $(ClassName.DOT)
127
+ .removeClass(ClassName.ACTIVE)
128
+ .each(function(i){
129
+ if(index == i + 1){
130
+ $(this).addClass(ClassName.ACTIVE);
131
+ return false;
132
+ }
133
+ });
134
+
135
+ // 矢印ボタンを更新
136
+ if(index <= 1){
137
+ $(ClassName.PREV).hide();
138
+ } else {
139
+ $(ClassName.PREV).show();
140
+ }
141
+ if(index >= count){
142
+ $(ClassName.NEXT).hide();
143
+ } else {
144
+ $(ClassName.NEXT).show();
145
+ }
146
+
147
+ }
148
+
149
+
150
+
151
+
41
152
  //NOTE 実行
42
153
  init();
43
154
 
155
+
156
+ });
44
157
  ```
45
158
 
46
159
  ```html