スマホの縦横をorientationchangeで検出
2つ前の投稿の続きです。
「position:absolute」で疑似「position:fixed」を実現させるために、(基準位置)+(スクロールした距離)をpositionに与えるという考え方で、ポートレート(縦長)の時とランドスケープ(横長)の時で"基準位置"が変わるので「window.location.reload();」でリロードしていました。
しかしこれだと、フォームに入力中など、ページがリフレッシュされたら作業状態が失われたて困る場合もありますし、そもそも毎回ページを呼び出し直すのはうざったいので、縦横の寸法の差分をpositionに加えるという方法を取った方が良いと思います。
ということで、自分用に、調査用スクリプトです。
さらに備忘録的には、iphone(iPod)の縦横は「window.orientation」の角度で判別できる、Androidではresizeイベントで呼び出す、という内容です。
黒い四角はクリック(タップ)で消えます。
iPhoneを
縦横に回転してみてください
(クリックでこの表示を削除)
<style type="text/css">
#test20120323{
width:300px;
height:200px;
text-align:center;
position:absolute;
top:50px;
left:50%;
margin:0 0 0 -100px;
background:#000;
color:#fff;
}
</style>
<div id="test20120323">
<p>iPhoneを</p>
<p>縦横に回転してみてください</p>
<p></p>
<p>(クリックでこの表示を削除)</p>
</div>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$(window).bind("load orientationchange resize",function(){
var ori=window.orientation;
var w=$(this).width();
var h=$(this).height();
$("#test20120323 p").eq(0).text("window.orientation="+ori);
$("#test20120323 p").eq(1).text("width="+w);
$("#test20120323 p").eq(2).text("height="+h);
});
});
$("#test20120323").click(function(){
$(this).remove();
});
</script>


