javascript 实现模拟滚动条,但不支持鼠标滚轮

模拟滚动条做项目的时候,很多时候会用到,所以就写了一个这么模拟滚动条,但是不支持滚轮事件

 

<!doctype html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title></title>

</head>

 

<style>

 

*{padding:0;margin:0;}

.scroll{width:320px;margin:30px auto;}

#boxWrap{width:300px;border:1px solid #ccc;height:400px;overflow: hidden;float:left;position:relative;}

#boxInner{position:absolute;}

#boxInner p{padding:5px; line-height:24px;text-indent:2em;}

#rollWrap{background:#ddd;height:400px;width:15px;float:right;position: relative;}

#rollInner{height:30px;width:100%;background:orange;position:absolute;cursor:pointer;}

 

</style>

 

<body>

    

    <div class="scroll">

 

        <div id="boxWrap">

            <div id="boxInner">

                <p>“瘾”为何物? “瘾”是一种走火入魔的状态,由灵魂而肉体,以至灵肉无间。会过瘾的人对唯物、唯心之辩的态度是付之一笑。过瘾的那一会儿,你就是个小神仙,无所不能,无我无他,无虚无实。

假如说生命有度,把心与身的存在状态从低到高排列成度数,那么“瘾”就是一种超乎正常的生命度。达到这种生命度安全又不碍别人事的方法挺多,但这些方法的假象是受罪。巨大的甜头就在那一点儿苦头后面。比如我酷爱长跑,要的是那终极的舒适,但那舒适的穿越几乎是以垂死的状态去获取的。

写作之于我,也是一种秘密的过瘾。谁都说呀,歇歇吧,写那么苦图什么?过去我和他们见识一样,也认为自己挺悲壮的,整天背对世界,背对许多人间乐事在那里写。现在我发现自己并不是这么回事,其实是在偷着乐。背对世界,把所有杂念排除,把精神凝聚到白热程度,把所有的敏感都唤起来,使感觉丰满到极致。于是乎一些意外的词汇、句子在纸上出来了,它们组成了人物细节、行为,再往前逼自己一步,再越过一点儿不适,就达到了那种极端的舒适,因为自由了,为所欲为了。要说活着,这儿,你就是个小神仙,无所不能,无我无他,无虚无实。

假如说生命有度,把心与身的存在状态从低到高排列成度数,那么“瘾”就是一种超乎正常的生命度。达到这种生命度安全又不碍别人事的方法挺多,但这些方法的假象是受罪。巨大的甜头就在那一点儿苦头后面。比如我酷爱长跑,要的是那终极的舒适,但那舒适的穿越几乎是以垂死的状态去获取的。

写作之于我,也是一种秘密的过瘾。谁都说呀,歇歇吧,写那么苦图什么?过去我和他们见识一样,也认为自己挺悲壮的,整天背对世界,背对许多人间乐事在那里写。现在我发现自己并不是这么回事,其实是在偷着乐。背对世界,把所有杂念排除,把精神凝聚到白热程度,把所有的敏感都唤起来,使感觉丰满到极致。于是乎一些意外的词汇、句子在纸上出来了,它们组成了人物细节、行为,再往前逼自己一步,再越过一点儿不适,就达到了那种极端的舒适,因为自由了,为所欲为了。要说活着,这时的我是活到了淋漓尽致。我试着不写,可是不行,就像没醒透似的。一连多日不写,就是一连多日半打盹儿地过活,新陈代谢都不对了。出去旅行,同行的有丈夫,有时还有其他朋友。我的写作让他们都很头疼,一些计划要根据我的时间表转。他们抱怨,问我几天不写死不死得了。我说不写就是让我身上有一块痒痒,又不让我挠。哪怕早起一两个小时,我也得把过瘾的时间留出来。对我来说,生命一天不达到那个浓度、烈度,没有</p>

            </div>

        </div>

       

       <div id="rollWrap">

           <div id="rollInner"></div>

       </div>

 

    </div>

 

</body>

 

</html>

 

<script>

    //获取相关的DOM元素

 with(document){

  var oBoxWrap = getElementById('boxWrap');

  //内容信息

  var oBoxInner = getElementById('boxInner');

 

  var oRollWrap = getElementById('rollWrap');

  //小滑块

  var oRollInner = getElementById('rollInner');

 }

 

 //具体使用那个小滑块来控制滚动的距离,那么拖拽的时候就必须是它在动

 

oRollInner.onmousedown = function(ev){

//事件兼容

var oEvent = ev || event;

//获取当前 滑块的 距离

var disY = oEvent.clientY - oRollInner.offsetTop;

  //IE兼容问题,下面是判断浏览器是否支持 setCapture 方法

  if (oRollInner.setCapture) {

  oRollInner.onmousemove = Move;

  oRollInner.onmouseup = MoveUp;

  }else{

  document.onmousemove = Move;

    document.onmouseup = MoveUp;

  }

  

  // 移动的函数

     function Move(ev){

 

    var oEvent = ev || event;

    //定义距离的变量

    var t = oEvent.clientY - disY;

 

    //防止滑块超出距离

    if (t < 0 ) {

 

    t = 0;

       //假如 t 大于 滚动条宽度的时候等于滚动条宽度值

    }else if ( t > oRollWrap.offsetHeight - oRollInner.offsetHeight ){

 

        t =  oRollWrap.offsetHeight - oRollInner.offsetHeight;

    }

 

    oRollInner.style.top = t +'px';

        

         // t值 除去 滚动框的高度 减去 滚动条的高度 得到 百分值

         var scale = t / ( oRollWrap.offsetHeight - oRollInner.offsetHeight );

         

         //里面的内容滚动 ( 外面DIV高度 - 里面DIV高度 ) * 百分值 得到负数

         oBoxInner.style.top =  ( oBoxWrap.offsetHeight - oBoxInner.offsetHeight ) * scale +'px';

         

         //显示百分值

         document.title = scale;

    }

 

    //抬起的函数

   function MoveUp(){

       

      this.onmousemove = null;

      this.onmouseup = null;

     //IE 下 独有的

      if (oRollInner.releaseCapture) {

           oRollInner.releaseCapture();

      };

      

   }

 

 //IE 下  setCapture(); 阻止默认事件

  if (oRollInner.setCapture) {

    oRollInner.setCapture();

  }

    return false; 

 

}

 

</script>

 

 
posted @ 2014-08-04 09:11  Zion0707  阅读(835)  评论(0编辑  收藏  举报