Creating a CSS 'path' on hover

前端 未结 2 1718
旧时难觅i
旧时难觅i 2021-01-30 01:55

I\'m trying to generate a \'nice\' CSS menu using (mainly) CSS, but with a tiny bit of jQuery as well:

My overall idea is:

+--------------------         


        
2条回答
  •  再見小時候
    2021-01-30 02:27

    function rotateStep($this, $circle, angle) {
        $this.animate({
            rotation: angle
        }, {
            step: function(now, fx) {
                $this.css({
                    transform: 'rotate(' + now + 'deg)'
                });
                $circle.css({
                    transform: 'translate(-50%, -50%) rotate(' + -now + 'deg)'
                });
            }
        });
    }
    
    $('.wrap').hover(function() {
        var $this = $(this),
            $circleWrappers = $this.find('.circleWrapper'),
            angleOffset = 360 / $circleWrappers.length,
            angle = - angleOffset / 2,
            distance = Math.min($this.width(), $this.height()) / 2;
        
        $circleWrappers.each(function() {
            var $this = $(this),
                $circle = $(this).find('.circle');
            $circle.animate({ top: -distance });
            rotateStep($this, $circle, angle);
            angle -= angleOffset;
        });
    }, function() {
        var $this = $(this),
            $circleWrappers = $this.find('.circleWrapper');
        
        $circleWrappers.each(function() {
            var $this = $(this),
                $circle = $(this).find('.circle');
            $circle.animate({ top: 0 });
            rotateStep($this, $circle, 0);
        });
    });
    .wrap {
        position: relative;
        background-color: #cccccc;
        width: 400px;
        height: 400px;
        transition:all 0.8s;
        transform-origin: center center;
    }
    .circleWrapper {
        display: inline-block;
        position: absolute;
        left: 50%;
        top: 50%;
    }
    .circle {
        position: absolute;
        width: 80px;
        height: 80px;
        border-radius: 40px;
        background-color: white;
        box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.5);
        line-height: 80px;
        text-align: center;
        font-family: arial;
        font-size: 42px;
        font-weight: bold;
        transform: translate(-50%, -50%);
    }
    
    
    1
    2
    3
    4

    JSFiddle

提交回复
热议问题