なめらかスクロール

by nekosmash

HTML

<script src="http://dl.dropbox.com/u/63305355/jquery.mousewheel.js"></script>
<script src="http://dl.dropbox.com/u/63305355/jquery.easie.js"></script>
<body>
<div id="contents">
    <div id="c01" class="section">
        <h2>SECTION 01</h2>
        <p>イージングスクロールに</p>
    </div>
    <div id="c02" class="section">
        <h2>SECTION 02</h2>
        <p>キーダウンイベントと</p>
    </div>
    <div id="c03" class="section">
        <h2>SECTION 03</h2>
        <p>ksk機能を追加しました</p>
    </div>
    <div id="c04" class="section">
        <h2>SECTION 04</h2>
        <p>キーを押し続けると</p>
    </div>
    <div id="c05" class="section">
        <h2>SECTION 05</h2>
        <p>スムーススクロールの効果が増大します</p>
    </div>
    <div id="c06" class="section">
        <h2>SECTION 06</h2>
        <p>iPhoneみたいでいいでしょ?</p>
    </div>
</div>
</body>

CSS

body,div,pre,p,blockquote, 
form,
dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6, 
embed,object { 
    margin: 0;
    padding: 0;
    vertical-align: baseline; 
    font-size: 100.01%;
}
body {
    background: #888;
    color: #888;
    font: 13px/1.231 Arial, Helvetica, sans-serif;
    *font-size:small;
    *font:x-small;
}
h1 {
    font-size: 130%;
    padding: 10px;
}
h1 a {
    color: #fff;
    text-decoration: none;
}
h1 a:hover {
    text-decoration: underline;
}
h2 {
    font-size: 182%;
}
div.section {
    width: 100%;
    background: #FFFFFF;
    padding: 20px;
    height: 400px;
    margin-bottom: 1px;
}

JavaScript

$(function() {
    var scrolly = 0;
    var speed = 100;
    var end;
    
    var agent = navigator.userAgent;
    if(agent.search(/iPhone/) != -1 || agent.search(/iPad/) != -1 || agent.search(/iPod/) != -1 || agent.search(/Android/) != -1){
        return;
    }
    
    //↑↓キー入力に対応
    $(window).keydown(function(e){        
        scroll(e.keyCode==38,e.keyCode==40);        
        return false;
    });
    
    //ホイールに対応
    $(window).mousewheel(function(event, mov) {
        scroll(mov>0,mov<0);
        return false;
    });
    
    //スクローラ本体
    function scroll(head,foot){
    
        if(end==false)speed+=30;
        else speed=100;
        end=false;
    
        if(jQuery.browser.webkit){
            if(head)scrolly =  $('body').scrollTop() - speed;
            else if(foot)scrolly =  $('body').scrollTop() + speed;
        }else{
            if(head)scrolly =  $('html').scrollTop() - speed;
            else if(foot)scrolly =  $('html').scrollTop() + speed;    
        }
        //アニメーション部分
        $('html,body')
            .stop()
            .animate({scrollTop:scrolly},'slow',$.easie(0,0,0,1),callback);
    }

    //完了通知
    function callback(){
        end = true;
    }
    
        
});