JSFiddle - React, Tailwind, and code Playground

by William Green

HTML

<div id="draggableBarContainer">
    <div id="draggableBar"></div>
</div>
<div id="log"></div>

CSS

#draggableBarContainer {
    width:10px;
    height:104px;
    background-color:#bbb;
    top:100px;
    left:120px;
    position:absolute;
}
html, body {
    margin:0;
    padding:0;
}
#draggableBar {
    height:50%;
    width:100%;
    background-color:#333;
    position:relative;
    top:0px;
}
body{
    height:900px;
}

JavaScript

var mouseDown = false;
var divOffset = {
    x: 0,
    y: 0
};
var bar = document.getElementById('draggableBar');
window.addEventListener('mousedown',function(e){
	if(e.target.id == 'draggableBar'){
       mouseDown = true;
        divOffset.x = e.offsetX;
        divOffset.y = e.offsetY;
    }
});
window.addEventListener('mouseup',function(){
	mouseDown = false;
});
window.addEventListener('mousemove',function(e){
    if(mouseDown == true){
        if(e.target.id == 'draggableBar'){
        	//divOffset.y = e.offsetY;   
        }
        //get var offset top relative to document
        var container = document.getElementById('draggableBarContainer');
        var barRect = bar.getBoundingClientRect();
        var barOffsetTop = window.pageYOffset+barRect.top;//distance between the bar and top of document
        var containerRect = container.getBoundingClientRect();
        var containerTop = window.pageYOffset+containerRect.top;//distance between the track and top of document
        if(containerTop <= barOffsetTop && e.y-containerTop+divOffset.y > 0){
            //allow dragging down
            bar.style.top = e.y-containerTop+divOffset.y+'px';
         	//bar.style.top = e.y-+'px';   
        }
        console.log(e.offsetY+' | '+divOffset.y);
    }
});

/*var mouseDown = false;
var divOffset = {
    x: 0,
    y: 0
};
window.addEventListener("mousedown", function (e) {
    if (e.target.id == 'draggableBar') {
        mouseDown = true;
        divOffset.x = e.offsetX;
        divOffset.y = e.offsetY;
    }
});
window.addEventListener("mouseup", function () {
    mouseDown = false;
});
window.addEventListener("mousemove", function (e) {
    if (mouseDown == true) {
        var scrollBarButton = document.getElementById('draggableBar');
        if ((scrollBarButton.parentNode.offsetHeight - scrollBarButton.offsetHeight) >= (e.pageY - scrollBarButton.parentNode.offsetTop - divOffset.y)) {
            if (scrollBarButton.offsetTop >= 0) {
               ...