18Jan
[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
28Mar
Posted by No Name Ninja in Javascript Sample
<script language="javascript" type="text/javascript"> onload = function(){ document.forms['testform'].elements['testbutton'].onclick = showUnshow.bind(document.getElementById('testDiv')); } function showUnshow(e){ //fixedかabsoluteを設定する必要がある。 this.style.position = 'absolute'; //要素の高さ、幅を取得 var rect = this.getBoundingClientRect(); var hgt; var wdh; if(rect.height){ hgt = rect.height; }else{ hgt = rect.bottom - rect.top; } if(rect.width){ wdh = rect.width; }else{ wdh = rect.right - rect.left; } //小数を切り上げ wdh = Math.ceil(wdh); hgt = Math.ceil(hgt); //表示か非表示かを判定 var val = this.style.clip.replace(/ /g,""); var isShown = false; var regx = new RegExp('rect\\([0-9]+px,[0-9]+px,([0-9]+)px,[0-9]+px\\)'); if (val.match(regx)) { if(RegExp.$1>0){ isShown = true; }else{ isShown = false; } }else{ isShown = true; } //表示処理 if(isShown){ var timerId = setInterval(function(){ hgt = hgt-1; if(hgt < 0){ clearInterval(timerId); return; } this.style.clip = 'rect(0px,' + wdh + 'px,' + hgt + 'px,0px)'; }.bind(this),5); //非表示処理 }else{ tempHgt = 0; var timerId = setInterval(function(){ tempHgt = tempHgt + 1; if(tempHgt > hgt){ clearInterval(timerId); return; } this.style.clip = 'rect(0px,' + wdh + 'px,' + tempHgt + 'px,0px)'; }.bind(this),5); } } </script>