回答編集履歴

1

変更

2019/01/09 05:31

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -1,3 +1,111 @@
1
+ setintervalとかつかったことないのですが、このやりかただと、intervalidが事前には取得できないから、想定通りにはうごかない。
2
+
3
+ topなら最後0になるからいいですけど、途中だとうまくスクロール量を調整してあげないと、`==`にならないです。
4
+
5
+
6
+
7
+ とりあえず、scroll-btnというidのdivに対して、scroll-oneより上になるまでスクロールできるようなコードにはしてみた。
8
+
9
+ やりたかったのは、setintervalのときに、目的の場所をわたしてあげて、目的の場所をしっているスクロール関数を返すように作ってあげればいいと思ったこと。
10
+
11
+
12
+
13
+ ```html
14
+
15
+ <html>
16
+
17
+ <head>
18
+
19
+ <script language="javascript">
20
+
21
+ // scrollTop("top",500,"bodytop");
22
+
23
+ // scrollTop("scroll-btn", 500, "scroll-one");
24
+
25
+ function scrollTop(elem,duration, toElem){
26
+
27
+ var target = document.getElementById(elem);
28
+
29
+ var upto = document.getElementById(toElem);
30
+
31
+ target.addEventListener("click",function(){
32
+
33
+ var currentY=window.pageYOffset;
34
+
35
+ var step=duration/currentY>1?10:100;
36
+
37
+ var timeStep=duration/currentY*step;
38
+
39
+ var intervalID=setInterval(scrollUp(intervalID, upto.offsetTop),timeStep);
40
+
41
+ function scrollUp(intervalID, dest){
42
+
43
+ return function() {
44
+
45
+ currentY=window.pageYOffset;
46
+
47
+ if(currentY<=dest){
48
+
49
+ console.log("come");
50
+
51
+ console.log(intervalID);
52
+
53
+ console.log(clearInterval(intervalID));
54
+
55
+ clearInterval(intervalID);
56
+
57
+ }else{
58
+
59
+ scrollBy(0,-step);
60
+
61
+ }
62
+
63
+ };
64
+
65
+ }
66
+
67
+ });
68
+
69
+ }
70
+
71
+ </script>
72
+
73
+ </head>
74
+
75
+
76
+
77
+ <body id="bodytop" onload='scrollTop("top",500,"bodytop");scrollTop("scroll-btn", 500, "scroll-one");'>
78
+
79
+ <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
80
+
81
+ <div id="scroll-one">1</div>
82
+
83
+ <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
84
+
85
+ <div id="scroll-btn">1へスクロール</button>
86
+
87
+ <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
88
+
89
+ <div id="top">top</div>
90
+
91
+ </body>
92
+
93
+ </html>
94
+
95
+ ```
96
+
97
+
98
+
99
+ 正直、おとなしく既存のライブラリとかでやったほうがいいと思います。
100
+
101
+
102
+
103
+ ---
104
+
105
+ deprecated
106
+
107
+
108
+
1
109
  ちゃんと読んでませんが、TOPに戻れていると仮定して、これで良いのでは?
2
110
 
3
111
  ```html