練習がてら画面上部にある要素のtopをマイナスにして上にひっこめてしまう関数をall javascriptで作成しました。
使いまわしができるようにオブジェクトにしてしまおうと考えとりあえず関数名をメソッドに変えて試しに動かしてみたらエラーが出ました。
メソッドで再帰処理をしようとしているのが原因の様ですが
再帰処理には知識が無いため、メソッドで再帰をするいいやり方が思い浮かびませんでした。
再帰処理をやめて書き直すべきなのでしょうか?
あと再帰処理に関していい参考書があればお教え願えるとありがたいです
lang
1//hiddenElement.js 2//hiddenElement. 3//4つのメソッド 4//登録 5// hiddenElement.entry(Ypx,element); 6// 7//Ypxは反応するスクロール量、elementは隠したいエレメント 8//スクロール量が規定に達すると画面上の隠したいエレメントをtopを操作することで隠してしまう。 9//問題点 10// 1.操作量が15pxごとなので中途半端な大きさのエレメントだと全部隠れてくれない 11// 2.再読み込みに対応していない 12// 3.IEだと動かない(はず)、setTimeoutの引数渡し方法を修正すると治るはず 13// 14 15//エレメントを隠す 16//該当エレメントのtopとheightを調べ、一定間隔ごとにtopを減らしていきheightと同値になると終了 17 18var hiddenElement={ 19 hide:function (element){ 20 var top=element.offsetTop; 21 var height=element.offsetHeight; 22 if(0>=(top+height)){ 23 return; 24 } 25 setTimeout( 26 function(element,top){ 27 element.style.top=top-15+"px"; 28 this.hide(element); 29 } 30 ,10,element,top); 31 }, 32 show:function(element){ 33 var top=element.offsetTop; 34 var height=element.offsetHeight; 35 if(0<=top){ 36 return; 37 } 38 setTimeout( 39 function(element,top){ 40 element.style.top=top+15+"px"; 41 this.show(element); 42 } 43 ,10,element,top); 44 }, 45 //スクロール検知() 46 senseEvent:function(Ypx,element){ 47 var a=document.body.scrollTop; 48 var b=document.documentElement.scrollTop; 49 c= a || b; 50 //条件成立なら 51 if(c>Ypx){ 52 this.hide(element); 53 }else if(0>element.offsetTop){ 54 this.show(element); 55 }; 56 }, 57 58 entry:function (Ypx,element){ 59 window.addEventListener("scroll",function(){ hiddenElement.senseEvent(Ypx,element); },false); 60 } 61 62 63 64}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/12 00:39
2015/07/12 01:24