JSFiddle - React, Tailwind, and code Playground

HTML

<div id="timeline">
        <div id="dragger" class="ui-draggable" style="left: 93px;"></div>
    <div id="layer1">
        <p class="layer">layer1</p>
        <div style="left: 16px;" class="keyframe 16px ui-draggable"></div>
        <div style="left: 197px;" class="keyframe 197px ui-draggable"></div>
        <div style="left: 432px;" class="keyframe 432px ui-draggable"></div>
    </div>
    <div id="layer2">
        <p class="layer">layer2</p>
        <div style="left: 26px;" class="keyframe 16px ui-draggable"></div>
        <div style="left: 97px;" class="keyframe 197px ui-draggable"></div>
        <div style="left: 532px;" class="keyframe 432px ui-draggable"></div>
    </div>
</div>
<div id="something"></div>

CSS

#timeline {
height:20px;
position:relative;
width:620px;
    font-size:10px;
    font-family:Arial;
}

.keyframe {
background:#000033;
border-top:1px solid #333333;
display:inline-block;
height:6px;
position:absolute;
width:6px;
margin:5px 0 0 0;
}

#dragger {
background:red;
height:323px;
position:absolute;
width:20px;
}
#layer2 {
border-bottom:1px solid #333333;
border-top:1px solid #333333;
height:20px;
margin:10px 0 0;
}
#layer1 {
border-bottom:1px solid #333333;
border-top:1px solid #333333;
height:20px;
margin:10px 0 0;
}
#something { margin-top: 20px }

.layer {
left:581px;
margin:4px;
position:absolute;
}

JavaScript

$(document).ready(function(){

 $("#dragger").draggable({

            containment: '#timeline',
            axis: 'x',
            drag: function(event, ui) {

                    var this_left = parseInt($(this).css("left").split("px")[0],10);
                    var keyframes = $("div.keyframe");
                    var closest_left = [null,0], closest_right = [null,0];
            
                    keyframes.each(function(index) {
                        keyframes.css("background-color","").removeClass("blue").removeClass("yellow");
                            var t = $(this);
                            var offset = parseInt(t.css("left").split("px")[0],10) - this_left;
                            
    
                            if (offset >= 0) {
                                    if (closest_right[0] == null || offset < closest_right[1]) {
                                            closest_right[0] = $(this);
                                            closest_right[1] = offset;
                                    }
                            }

                            else {
                                    if (closest_left[0] == null || offset > closest_left[1]) {
                                            closest_left[0] = $(this);
                                            closest_left[1] = offset;
                                    }
                            }


                    $(closest_left[0]).addClass("blue").css("background-color","blue");
                    $(closest_right[0]).addClass("yellow").css("background-color","yellow");

                    
                    });
                
            }
            
    });

});