美文网首页
用canvas画带超链接的文字

用canvas画带超链接的文字

作者: pangPython | 来源:发表于2019-08-22 08:18 被阅读0次

    代码来自Stack Overflow:https://stackoverflow.com/questions/6215841/create-links-in-html-canvas

    <!DOCTYPE html>

    <!-- This page shows how to add multiple links to <canvas> (by Yakovenko Max) -->

    <html>

    <head>

        <title>Canvas Links Example</title>

        <script>

            function OnLoad() {

                // Get canvas

                var canvas = document.getElementById("myCanvas");

                // 2d context

                var ctx = canvas.getContext("2d");

                ctx.translate(0.5, 0.5); // * Move the canvas by 0.5px to fix blurring

                // Block border

                ctx.strokeStyle = "#5F7FA2";

                ctx.strokeRect(50, 50, 185, 90);

                // Photo

                var img = new Image();

                img.src = "http://www.cs.washington.edu/education/courses/csep576/05wi/projects/project4/web/artifact/liebling/average_face.gif";

                img.onload = function () {

                    ctx.drawImage(img, 59.5, 59.5); // Use -0.5px on photos to prevent blurring caused by * fix

                }

                // Text

                ctx.fillStyle = "#000000";

                ctx.font = "15px Tahoma";

                ctx.textBaseline = "top";

                ctx.fillText("Username", 95, 65);

    // ***** Magic starts here *****

                // Links

                var Links = new Array(); // Links information

                var hoverLink = ""; // Href of the link which cursor points at

                ctx.fillStyle = "#0000ff"; // Default blue link color

                ctx.font = "15px Courier New"; // Monospace font for links

                ctx.textBaseline = "top"; // Makes left top point a start point for rendering text

                // Draw the link

                function drawLink(x, y, href, title) {

                    var linkTitle = title,

                        linkX = x,

                        linkY = y,

                        linkWidth = ctx.measureText(linkTitle).width,

                        linkHeight = parseInt(ctx.font); // Get lineheight out of fontsize

                    // Draw the link

                    ctx.fillText(linkTitle, linkX, linkY);

                    // Underline the link (you can delete this block)

                    ctx.beginPath();

                    ctx.moveTo(linkX, linkY + linkHeight);

                    ctx.lineTo(linkX + linkWidth, linkY + linkHeight);

                    ctx.lineWidth = 1;

                    ctx.strokeStyle = "#0000ff";

                    ctx.stroke();

                    // Add mouse listeners

                    canvas.addEventListener("mousemove", on_mousemove, false);

                    canvas.addEventListener("click", on_click, false);

                    // Add link params to array

                    Links.push(x + ";" + y + ";" + linkWidth + ";" + linkHeight + ";" + href);

                }

                // Link hover

                function on_mousemove(ev) {

                    var x, y;

                    // Get the mouse position relative to the canvas element

                    if (ev.layerX || ev.layerX == 0) { // For Firefox

                        x = ev.layerX;

                        y = ev.layerY;

                    }

                    // Link hover

                    for (var i = Links.length - 1; i >= 0; i--) {

                        var params = new Array();

                        // Get link params back from array

                        params = Links[i].split(";");

                        var linkX = parseInt(params[0]),

                            linkY = parseInt(params[1]),

                            linkWidth = parseInt(params[2]),

                            linkHeight = parseInt(params[3]),

                            linkHref = params[4];

                        // Check if cursor is in the link area

                        if (x >= linkX && x <= (linkX + linkWidth) && y >= linkY && y <= (linkY + linkHeight)) {

                            document.body.style.cursor = "pointer";

                            hoverLink = linkHref;

                            break;

                        } else {

                            document.body.style.cursor = "";

                            hoverLink = "";

                        }

                    }

                    ;

                }

                // Link click

                function on_click(e) {

                    if (hoverLink) {

                        window.open(hoverLink); // Use this to open in new tab

                        //window.location = hoverLink; // Use this to open in current window

                    }

                }

                // Ready for use ! You are welcome !

                drawLink(95, 93, "http://www.facebook.com/", "Me at facebook");

                drawLink(95, 110, "http://plus.google.com/", "Me at G+");

            }

        </script>

    </head>

    <body onload="OnLoad();">

    <canvas id="myCanvas" width="450" height="250" style="border:1px solid #eee;">

        Canvas is not supported in your browser ! :(

    </canvas>

    </body>

    </html>

    相关文章

      网友评论

          本文标题:用canvas画带超链接的文字

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