美文网首页
鼠标滑过文字跟随效果

鼠标滑过文字跟随效果

作者: zkzhengmeng | 来源:发表于2020-11-27 11:18 被阅读0次

    1.鼠标滑动文字跟随效果,可自定义文字

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="utf-8">
            <title>Canvas文字跟随特效</title>
            <style type="text/css">
                html,
                body {
                    width: 100%;
                    height: 100%;
                    margin: 0px;
                    overflow: hidden;
                    &:hover {
                        span {
                            display: none;
                        }
                    }
                }
                
                canvas {
                    cursor: crosshair;
                }
                
                span {
                    font-family: 'Georgia', cursive;
                    font-size: 40px;
                    position: fixed;
                    top: 50%;
                    left: 50%;
                    color: #000;
                    margin-top: -40px;
                    margin-left: -200px;
                }
            </style>
        </head>
    
        <body>
            <canvas id='canvas'></canvas>
            <span id='info'>Click and drag to draw!<span>
    
    
        <script type="text/javascript">
            
            var position = {x: 0, y: window.innerHeight/2};
            var counter = 0;
            var minFontSize = 3;
            var angleDistortion = 0;
            var letters = "我是一只小鸟,在天空自由自在的翱翔!";
            
            var canvas;
            var context;
            var mouse = {x: 0, y: 0, down: false}
            
            function init() {
                canvas = document.getElementById( 'canvas' );
                context = canvas.getContext( '2d' );
                canvas.width = window.innerWidth;
                canvas.height = window.innerHeight;
                  
                canvas.addEventListener('mousemove', mouseMove, false);
                canvas.addEventListener('mousedown', mouseDown, false);
                canvas.addEventListener('mouseup',   mouseUp,   false);
                canvas.addEventListener('mouseout',  mouseUp,  false);  
                
                window.onresize = function(event) {
                    canvas.width = window.innerWidth;
                    canvas.height = window.innerHeight;
                }
            }
            
            function mouseMove ( event ){
                mouse.x = event.pageX;
                mouse.y = event.pageY;
                draw();
            }
            function mouseDown( event ){
                mouse.down = true;
                position.x = event.pageX;
                position.y = event.pageY;
                document.getElementById('info').style.display = 'none';
            }
            
            function mouseUp( event ){
                canvas.width = canvas.width; 
            }
        
            function draw() {
                if ( mouse.down ) {
                    var d = distance( position, mouse );
                    var fontSize = minFontSize + d/2;
                    var letter = letters[counter];
                    var stepSize = textWidth( letter, fontSize );
                    if (d > stepSize) {
                        var angle = Math.atan2(mouse.y-position.y, mouse.x-position.x);
                        context.font = fontSize + "px Georgia";    
                        context.save();
                        context.translate( position.x, position.y);
                        context.rotate( angle );
                        context.fillText(letter,0,0);
                        context.restore();
                        counter++;
                        if (counter > letters.length-1) {
                            counter = 0;
                        }
                        //console.log (position.x + Math.cos( angle ) * stepSize)
                        position.x = position.x + Math.cos(angle) * stepSize;
                        position.y = position.y + Math.sin(angle) * stepSize;
                
                    }
                }     
            }
            
            function distance( pt, pt2 ){
              
                var xs = 0;
                var ys = 0;
             
                xs = pt2.x - pt.x;
                xs = xs * xs;
             
                ys = pt2.y - pt.y;
                ys = ys * ys;
             
                return Math.sqrt( xs + ys );
            }
            
            function textWidth( string, size ) {
                context.font = size + "px Georgia";
              
                if ( context.fillText ) {
                    return context.measureText( string ).width;
                } else if ( context.mozDrawText) {
                    return context.mozMeasureText( string );
                }
             };
            
            init();
    
        </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:鼠标滑过文字跟随效果

          本文链接:https://www.haomeiwen.com/subject/sfqxwktx.html