JSFiddle - React, Tailwind, and code Playground

by Victor

HTML

<div class="screen">
    <div class="slidemenu">
        <div class="item">thing</div>
        <div class="item">thingaview</div>
        <div class="item">thi</div>
        <div class="item">thingthathasabig</div>
        <div class="item">thing</div>
    </div>
</div>

CSS

.screen {
    width: 300px;
    height: 500px;
    border: 1px solid black;
    overflow:hidden;
}
.slidemenu {
    
    max-width: none;
    width: 1000%;
}
.item {
    float:left;
    padding: 5px 10px;
    border-right: 1px solid gray;
}

JavaScript

(function($) {
    $.fn.drags = function(opt) {

        opt = $.extend({handle:"",cursor:"move"}, opt);

        if(opt.handle === "") {
            var $el = this;
        } else {
            var $el = this.find(opt.handle);
        }

        return $el.css('cursor', opt.cursor).on("mousedown", function(e) {
            if(opt.handle === "") {
                var $drag = $(this).addClass('draggable');
            } else {
                var $drag = $(this).addClass('active-handle').parent().addClass('draggable');
            }
            var z_idx = $drag.css('z-index'),
                drg_h = $drag.outerHeight(),
                drg_w = $drag.outerWidth(),
                //pos_y = $drag.offset().top + drg_h - e.pageY,
                pos_x = $drag.offset().left + drg_w - e.pageX;
            console.log(pos_x);
            
            
            $drag.css('z-index', 1000).parents().on("mousemove", function(e) {
                $('.draggable').offset({
                    //top:e.pageY + pos_y - drg_h,
                    left:e.pageX + pos_x - drg_w
                }).on("mouseup", function() {
                    $(this).removeClass('draggable').css('z-index', z_idx);
                });
            });
            e.preventDefault(); // disable selection
        }).on("mouseup", function() {
            if(opt.handle === "") {
                $(this).removeClass('draggable');
            } else {
                $(this).removeClass('active-handle').parent().removeClass('draggable');
            }
        });

    }
})(jQuery);

$('.slidemenu').drags();