回答編集履歴

1

追加でいただいた質問への回答を追記

2017/06/21 01:58

投稿

h_daido
h_daido

スコア824

test CHANGED
@@ -15,3 +15,99 @@
15
15
 
16
16
 
17
17
  でどうです?
18
+
19
+
20
+
21
+ ====以下追加質問の回答です=====
22
+
23
+ ちょっと手元にIEの検証環境がないので、勘ベースにはなりますが、
24
+
25
+ せっかくコードをシェアしていただいたので、怪しい箇所にコメントをしました(question①のとこ)
26
+
27
+
28
+
29
+ あと、これも勘ですが、リファクタリングしたほうがいいのではと思う箇所も2点あります。
30
+
31
+ ・refact① backgroundScrollYによって呼び出し元画面のスクロール位置をキープしているように見えるのですが、modal側でキープしてくれることが多いので不要な気がします。(フレームワークによりますが、おそらくbootstrap?)
32
+
33
+ ・refact② hidden.bs.modalイベントの補足が#confirm-modalに対しては2重で走ってないですか?console.logいれてあるので確認してみるといいと思います。
34
+
35
+
36
+
37
+ ```javascript
38
+
39
+ var backgroundScrollY = 0; // refact① この処理は必要ですかね?
40
+
41
+ var modalFlg = false; // refact① この処理は必要ですかね?
42
+
43
+ $('.preview_btn').click(function() {
44
+
45
+ $('iframe#confirm').contents().find('body').html('');
46
+
47
+ $('.subject-confirm').text('');
48
+
49
+ $('.mail-confirm-title').text('');
50
+
51
+ var kind = $(this).data('type');
52
+
53
+ preview($(this).data('type'));
54
+
55
+ modalFlg = true;
56
+
57
+ backgroundScrollY = $(window).scrollTop(); // refact① この処理は必要ですかね?
58
+
59
+ });
60
+
61
+ $(window).on('scroll', function() {
62
+
63
+ if (modalFlg) {
64
+
65
+ $(window).scrollTop(backgroundScrollY); // refact① この処理は必要ですかね?
66
+
67
+ }
68
+
69
+ });
70
+
71
+ // refact② おそらくですが、下記 $('.modal').on('hidden.bs.modal', function() {...}) と処理が2重で走ってないですか?
72
+
73
+ $('#confirm-modal').on('hidden.bs.modal', function() {
74
+
75
+ console.log('#confirm-modal hidden.bs.modal is called')
76
+
77
+ console.log('backgroundScrollY => ', backgroundScrollY)
78
+
79
+ // question① IEでスクロールが走ってしまうのは、この箇所が怪しいです。
80
+
81
+ $('html, body').prop({ scrollTop: backgroundScrollY }); // refact① この処理は必要ですかね?
82
+
83
+ modalFlg = false;
84
+
85
+ });
86
+
87
+
88
+
89
+ // モーダル画面表示時
90
+
91
+ $('.modal').on('show.bs.modal', function() {
92
+
93
+ modalFlg = true;
94
+
95
+ backgroundScrollY = $(window).scrollTop(); // refact① この処理は必要ですかね?
96
+
97
+ });
98
+
99
+ $('.modal').on('hidden.bs.modal', function() {
100
+
101
+ console.log('.modal hidden.bs.modal is called')
102
+
103
+ console.log('backgroundScrollY => ', backgroundScrollY)
104
+
105
+ // question① IEでスクロールが走ってしまうのは、この箇所が怪しいです。
106
+
107
+ $('html, body').prop({ scrollTop: backgroundScrollY }); // refact① この処理は必要ですかね?
108
+
109
+ modalFlg = false;
110
+
111
+ });
112
+
113
+ ```