JSFiddle - React, Tailwind, and code Playground

by lollero

HTML

<ul id="menu">
        <li><a href="#">Lorem</a></li>
        <li><a href="#">Ipsum</a></li>
        <li><a href="#">Dolor</a></li>
        <li class="current"><a href="#">Sit</a></li>
        <li><a href="#">Amet</a></li>
</ul>
Possible name: Spotlight Menu

CSS

#menu_wrap {
    position: relative;
    margin: 60px;
    float: left;
}

.marker {
    width: 10px;
    height: 10px;
    background: #64CF00;
    position: absolute;
    top: 0px;
    left: 0px;
    z-index: 5;
    width: 50px;
    display: none;
}

.Mhighlight {
    display: none;
    background: #83EC21;
    z-index: 6;
}

#menu {
    background: #444444;
    float: left;
}

#menu li {
    float: left;
}

#menu a { 
    float: left;
    padding: 10px; 
    color: #ffffff;
    text-decoration: none;
    position: relative;
    z-index: 10;
}

#menu .current {
    background: #555555;
}

JavaScript

// Options
var Speed = 400;
var Easing = 'easeOutQuint';
var HighlightSpeed = 200;

var Menu = $('#menu');
    Menu.wrap('<div id="menu_wrap" />');

var MenuWrap = $('#menu_wrap');
    MenuWrap.prepend('<div class="marker"/><div class="marker Mhighlight"/>');

var Marker = $('.marker');
var Mhighlight = $('.Mhighlight');
var Menuli = $('#menu li');
var Current = $('.current');
var CurrentPosition = Current.position();

// DocumentReady action
$('.marker:not(.Mhighlight)').show();
Marker
    .height( Menu.height() )
    .stop().animate({
        width: Current.width(),
        left: CurrentPosition.left
    }, Speed, Easing);

Menuli.each(function(){

    // MouseEnter
    $(this).mouseenter(function(){
        
        var ThisPosition = $(this).position();
        Marker.stop().animate({
            width: $(this).width(),
            left: ThisPosition.left 
        }, Speed, Easing);
        
    });

    // Click
    $(this).click(function(){
        
        $('.current').removeClass();
        $(this).addClass('current');
        

    });
    
    $(this).mousedown(function() {
        Mhighlight
            .stop(true,true).fadeIn(HighlightSpeed)
            .delay(HighlightSpeed)
            .stop(true,true).fadeOut(HighlightSpeed)
    });

    

    // MouseLeave
        $(this).mouseleave(function(){
 
          var Current = $('.current');
          var CurrentPosition = Current.position();
  
        Marker.stop().animate({
            width: Current.width(),
            left: CurrentPosition.left
        }, Speed, Easing);
        
    });
    
});