美文网首页
用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