2012-03-05 62 views
15

我正在考虑自定义滚动条jQuery插件,有很多插件可用,但我想让我自己,问题是我没有得到如何移动内容的概念通过移动其他div元素(滚动条),以及如何通过使用鼠标滚轮移动内容?如何制作自定义滚动条jQuery插件

请帮我理解这一点。

由于

+0

我没有尝试过任何可用的插件,我只是WA nt在开始之前自己创造自己,想法应该清楚,它背后的概念/逻辑是什么,如果清楚的话我可以开始构建一个。 – 2012-03-05 06:16:07

回答

32

最简单的概念将是使用了jQuery UI可拖动并附加.draggable()法在.scrollbar

var $scrollable = $(".scrollable"), 
 
    $scrollbar = $(".scrollbar"), 
 
    height  = $scrollable.outerHeight(true), // visible height 
 
    scrollHeight = $scrollable.prop("scrollHeight"), // total height 
 
    barHeight = height * height/scrollHeight; // Scrollbar height! 
 

 
// Scrollbar drag: 
 
$scrollbar.height(barHeight).draggable({ 
 
    axis : "y", 
 
    containment : "parent", 
 
    drag: function(e, ui) { 
 
    $scrollable.scrollTop(scrollHeight/height * ui.position.top ); 
 
    } 
 
}); 
 

 
// Element scroll: 
 
$scrollable.on("scroll", function() { 
 
    $scrollbar.css({top: $scrollable.scrollTop()/height * barHeight }); 
 
});
.parent{ 
 
    position:relative; 
 
    overflow:hidden; 
 
    height:200px; 
 
    width:180px; 
 
    background:#ddd; 
 
} 
 
.scrollable{ 
 
    overflow-y:scroll; 
 
    position:absolute; 
 
    padding:0 17px 0 0; 
 
    width: 180px; 
 
    height:100%; 
 
} 
 
.scrollbar{ 
 
    cursor:n-resize; 
 
    position:absolute; 
 
    overflow:auto; 
 
    top:0px; 
 
    right:0px; 
 
    z-index:2; 
 
    background:#444; 
 
    width:17px; 
 
    border-radius:8px; 
 
}
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script> 
 
<script src="//code.jquery.com/ui/1.11.0/jquery-ui.min.js"></script> 
 

 
<div class="parent"> 
 
    <div class="scrollbar"></div> 
 
    <div class="scrollable"> 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non nunc eget sapien molestie mollis. Proin vestibulum vehicula varius. Duis a nunc ac risus facilisis consectetur. 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non nunc eget sapien molestie mollis. Proin vestibulum vehicula varius. Duis a nunc ac risus facilisis consectetur. 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non nunc eget sapien molestie mollis. Proin vestibulum vehicula varius. Duis a nunc ac risus facilisis consectetur. 
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non nunc eget sapien molestie mollis. Proin vestibulum vehicula varius. Duis a nunc ac risus facilisis consectetur.  
 
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non nunc eget sapien molestie mollis. Proin vestibulum vehicula varius. Duis a nunc ac risus facilisis consectetur. 
 
    </div> 
 
</div>

以上仅仅是与所需要的一个例子逻辑和数学,
它错过了“隐藏滚动条”,只是为了保持简单。我会给你添加所有需要的调整,插件。

+0

这是G8,真的G8,很快你会看到插件,需要应用更多的东西到这个,但我会尽力做到这一点.. 非常感谢你:) – 2012-03-05 07:43:49

+0

@Dheeraj等不及看到你的脚本!祝你好运! – 2012-03-05 08:01:32

+0

嗨roXon,我怎样才能使用鼠标滚轮进行滚动? – jeewan 2012-10-11 18:31:57

0

制作自定义滚动条没有jQuery-UI

HTML: -

<div class="parent"> 
      <div class="scrollbar"></div> 
      <div class="scrollable"> 
       <p>Lorem ipsum dolor sit amet, 
       consectetur adipiscing elit. Cras non nunc eget sapien molestie mollis. 
       Proin vestibulum vehicula varius. Duis a nunc ac risus facilisis consectetur.</p> 
      </div> 
    </div> 

CSS: -

.parent{ 
    position:relative; 
     margin:50px; 
     overflow:hidden; 
    height:200px; 
    width:180px; 
    background:#ddd; 
} 
.scrollable{ 
     overflow-y:scroll; 
    position:absolute; 
     padding:0 17px 0 0; 
    width: 180px; 
     height:100%; 
} 
.scrollbar{ 

    position:absolute; 
    overflow:auto; 
    top:0px; 
    right:0px; 
    z-index:2; 
    background:#444; 
    width:7px; 
    border-radius:5px; 
} 

的Javascript: -

var $scrollable = $('.scrollable'); 
    var $scrollbar = $('.scrollbar'); 
    $scrollable.outerHeight(true); 
    var H = $scrollable.outerHeight(true); 
    var sH = $scrollable[0].scrollHeight; 
    var sbH = H*H/sH; 



$('.scrollbar').height(sbH); 

$scrollable.on("scroll", function(){ 

    $scrollbar.css({top: $scrollable.scrollTop()/H*sbH }); 
});