回答編集履歴

2

\.stop\(\)挿入

2016/12/22 14:04

投稿

naomi3
naomi3

スコア1105

test CHANGED
@@ -11,6 +11,14 @@
11
11
  安全なプログラムにしました。
12
12
 
13
13
  コンテンツが少なくページ全体が短いと、非表示、表示、非表示になってチカチカするようですよ。
14
+
15
+
16
+
17
+ 修正
18
+
19
+
20
+
21
+ .stop()を入れて、fadeIn/fadeOut中に新たにfadeIn/fadeOutしようとすると前のfadeIn/fadeOutを中止するようにしました。
14
22
 
15
23
  ```JavaScript
16
24
 
@@ -34,6 +42,8 @@
34
42
 
35
43
  var currentPos = $(this).scrollTop();
36
44
 
45
+ console.log(currentPos);
46
+
37
47
  // 正:下方向/負:上方向
38
48
 
39
49
  var direction = currentPos - previousPos;
@@ -46,7 +56,7 @@
46
56
 
47
57
  if (! shown && conditionIfShow) {
48
58
 
49
- topBtn.fadeIn();
59
+ topBtn.stop().fadeIn();
50
60
 
51
61
  shown = true;
52
62
 
@@ -54,7 +64,7 @@
54
64
 
55
65
  } else if (shown && ! conditionIfShow) {
56
66
 
57
- topBtn.fadeOut();
67
+ topBtn.stop().fadeOut();
58
68
 
59
69
  shown = false;
60
70
 

1

安全なプログラムに

2016/12/22 14:04

投稿

naomi3
naomi3

スコア1105

test CHANGED
@@ -1,20 +1,32 @@
1
1
  完成イメージがわかりにくかったのですが、こういうことでしょうか?
2
2
 
3
3
  fadeIn/fadeOutを切り替えるタイミングの判定が良くないようです。
4
+
5
+
6
+
7
+ 修正
8
+
9
+
10
+
11
+ 安全なプログラムにしました。
12
+
13
+ コンテンツが少なくページ全体が短いと、非表示、表示、非表示になってチカチカするようですよ。
4
14
 
5
15
  ```JavaScript
6
16
 
7
17
  $(function() {
8
18
 
9
- <!--topボタンスクール上下の表示、非表示-->
19
+ // topボタンスクール上下の表示、非表示
10
-
11
- var topBtn = $('#top-btn');
12
-
13
- topBtn.hide();
14
20
 
15
21
  var height = 500;
16
22
 
23
+ var topBtn = $('#top-btn').hide();
24
+
25
+
26
+
17
- var shown = false;
27
+ var shown = false; // 現在の表示状態
28
+
29
+ var previousPos = 0;
18
30
 
19
31
 
20
32
 
@@ -22,9 +34,25 @@
22
34
 
23
35
  var currentPos = $(this).scrollTop();
24
36
 
37
+ // 正:下方向/負:上方向
38
+
39
+ var direction = currentPos - previousPos;
40
+
41
+ // 表示条件
42
+
43
+ var conditionIfShow = (direction <= 0 && currentPos >= height);
25
44
 
26
45
 
46
+
27
- if (shown && currentPos < height) {
47
+ if (! shown && conditionIfShow) {
48
+
49
+ topBtn.fadeIn();
50
+
51
+ shown = true;
52
+
53
+ console.log('表示');
54
+
55
+ } else if (shown && ! conditionIfShow) {
28
56
 
29
57
  topBtn.fadeOut();
30
58
 
@@ -32,15 +60,11 @@
32
60
 
33
61
  console.log('非表示');
34
62
 
35
- } else if (! shown && currentPos >= height) {
63
+ }
36
64
 
37
- topBtn.fadeIn();
38
65
 
39
- shown = true;
40
66
 
41
- console.log('表示');
67
+ previousPos = currentPos;
42
-
43
- }
44
68
 
45
69
  });
46
70