jQueryでフリックしてページ遷移。縦スクロール可能

参考とさせていただいたソースは下記


フリック動作でページ遷移させる
http://blog.nagachan.net/archives/88


こちらのソースだと、コンテンツが長い場合に縦スクロールができなくなるので、
その点を改良してみたソースが下記。

flick.js

$(function() {
 
    //イベントの取得
    $("#main").bind("touchstart touchmove touchend", touchHandler);
 
    function touchHandler(e) {
        e.preventDefault();
        var touch = e.originalEvent.touches[0];  
        var id;
 
        if (e.type == "touchstart") {   //画面にタッチした
 
         clearInterval(id);
         
            //タッチ開始時のX座標( startX )
            startX = touch.pageX; 
 
            //タッチ開始時のY座標( startY )
            startY = touch.pageY; 
 
 
        } else if (e.type == "touchmove") { //画面をスライドした
 
            //スライド時のX座標 - 開始時のX座標 = 移動距離( diffX )
            diffX = touch.pageX - startX;

            //スライド時のY座標 - 開始時のY座標 = 移動距離( diffY )
            diffY = touch.pageY - startY;
 
            //移動距離がマイナス(右方向にフリック)し、移動先のページがあるか
            //移動距離がプラス (左方向にフリック)し、移動先のページがある場合
            if (( diffX > 0 && prevPageURL ) || ( diffX < 0 && nextPageURL)) {
 
                //コンテンツエリアをフリックした分だけ移動
                $('#container').css( "left", diffX );
            }

            //Y座標の移動
            if (( diffY != 0 )) {
 
                //コンテンツエリアをフリックした分だけ移動
                //$('html, body').css( "top", diffY );
                //$(window).scrollTop(diffY + startY);
                $(window).scrollTop($(window).scrollTop() - diffY);
            }

 
        } else if (e.type == "touchend") { //画面から指を離した
 
            if (diffX > 100) { //右に100px以上移動したか
 
                if ( prevPageURL ) { //移動先のページがあれば、移動
                    location.href = prevPageURL;
                }
            } else if (diffX < -100) { //左に100px以上移動したか
 
                if ( nextPageURL ) { //移動先のページがあれば、移動
                    location.href = nextPageURL;
                }
            } else { //左右100px以下の移動距離であれば、スライドして元の位置に戻る。
                    $( '#container' ).animate({ left: 0 }, 200);
            }

      id = setInterval(function() {
      var top = $(window).scrollTop();
      $(window).scrollTop(top - diffY / 4 );
      if (top == $(window).scrollTop()) {
        clearInterval(id);
      }
    }, 10);


        }
    }  
 
});


html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="Content-Script-type" content="text/javascript">
<meta http-equiv="Content-Style-type" content="text/css">
<title>index2</title>
<link href="main.css" rel="stylesheet" type="text/css"/>
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>

<![endif]-->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script src="flick.js" type="text/javascript" charset="utf-8"></script>
<script>
var prevPageURL = "index.html";
var nextPageURL = "index3.html";
</script>

<style>
  article, aside, dialog, figure, footer, header,
  hgroup, menu, nav, section { display: block; }
</style>
</head>
<body>

<div id="container">

<div id="header">
</div>

	<div id="main">
		<p>index2</p>
	</div>

<div id="footer">
</div>

</div>

</body>
</html>


main.css

div#container {
	width: 100%;
	margin: 0 auto;
	position: relative;
}

div#main {

	width: 100%;
	height: 1000px;
	background: #ddd;
}

div#header {
	height: 80px;
}

ただ、iphoneだとスクロールバーがでない。androidだと出る。
あと基本動作が鈍いので改良の余地あり。
コンテンツが入るとさらに重くなる。