tippy.js: новая подсказка иногда пересекается со старой

Подобные вопросы уже задавались, но я пока не нашел ответа. Я попробовал несколько подсказок, и у меня было несколько проблем. Я все еще новичок в этом Javascript/css/html,

Попытка tippy.js на данный момент и найти это легко реализовать простую подсказку. Но по какой-то причине он запоминает старую подсказку, а затем накладывает новую всплывающую подсказку поверх старой. Я также добавил tippy.js флаг "dynamicTitle: true" но это не решило проблемы.

Код ниже является примером кода, который иллюстрирует проблему. При наведении мыши появляется всплывающая подсказка. Mouseout случайным образом меняет текст подсказки. При наведении курсора мыши на ячейки в какой-то момент вы увидите, что текст всплывающей подсказки перекрывается.

Как мне избежать этого?

<!DOCTYPE html>
<html lang="en">

<head>
    <title>Tooltip testing</title>
    <style>
        .class2 {
            background-color: rgb(255, 255, 255);
            color: rgb(0, 0, 0);
            text-align: center;
            font-size: 36px;
            font-family: "Lucida Console", Monaco, monospace;
        }

        .class1 {
            background-color: rgb(200, 100, 200);
            color: rgb(255, 255, 255);
            text-align: center;
            font-size: 36px;
            font-family: "Lucida Console", Monaco, monospace;
        }

        table {
            border-spacing: 1px;
            border-collapse: collapse;
            overflow: hidden;
            z-index: 1;
        }

        td {
            cursor: pointer;
            padding: 10px;
            position: relative;
        }
    </style>

    <script src="https://unpkg.com/tippy.js@2.1.1/dist/tippy.all.min.js"></script>

</head>

<body id="HTMLBody">
    <script>
        function rearrangeStatus() {
            // set status of cell
            cnt = 0;
            for (var i = 0; i < 4; i++) {
                for (var j = 0; j < 7; j++) {
                    var id = "" + cnt;
                    var rr = Math.random();
                    //console.log(rr);
                    if (rr > 0.5) {
                        document.getElementById(id).setAttribute("status", "occupied");
                    }
                    else {
                        document.getElementById(id).setAttribute("status", "free")
                    }
                    cnt++;
                }
            }
        }

        function functionMouseOver(id) {
            var stat = document.getElementById(id).getAttribute("status");
            if (stat == "occupied") {
                var text = "!!!!! It is !!!! occupied !!!!!";
            }
            if (stat == "free") {
                var text = "It is free";
            }

            document.getElementById(id).setAttribute("title", text);
        }

        function functionMouseOut(id) {
            document.getElementById(id).setAttribute("title", "");
        }

        // create HTML Table body
        titlenames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]
        var HTMLTableBody = "";
        HTMLTableBody += "<div class='tst'><table id='id1' style='width:40%'>";
        HTMLTableBody += "<tr>";
        for (var i = 0; i < 7; i++) {
            HTMLTableBody += "<th id='th" + i + "' class='class1'>" + titlenames[i] + "</th>";
        }
        HTMLTableBody += "</tr>";
        var cnt = 0;
        for (var i = 0; i < 4; i++) {
            HTMLTableBody += "<tr>";
            for (var j = 0; j < 7; j++) {
                idstr = "" + cnt;
                HTMLTableBody += '<td id="' + idstr + '"' + ' class="class2"'
                    + ' title=' + '"text12345"'
                    + "></td > ";
                cnt++;
            }
            HTMLTableBody += "</tr>";
        }
        HTMLTableBody += "</table></div>";

        document.getElementById("HTMLBody").innerHTML = "" + HTMLTableBody;

        // fill table with data
        cnt = 0;
        for (var i = 0; i < 4; i++) {
            for (var j = 0; j < 7; j++) {
                var id = "" + cnt;
                document.getElementById(id).innerHTML = cnt;
                cnt++;
            }
        }

        // set status of cell
        cnt = 0;
        for (var i = 0; i < 4; i++) {
            for (var j = 0; j < 7; j++) {
                var id = "" + cnt;
                if (cnt < 10) {
                    document.getElementById(id).setAttribute("status", "occupied");
                }
                else {
                    document.getElementById(id).setAttribute("status", "free")
                }
                cnt++;
            }
        }
    </script>

    <script>
        function handleTippy(lastClass, lastID) {
            var tt = "." + lastClass;
            var rr = "'#" + lastID + "'";
            //console.log(tt);
            tippy(tt, {
                placement: 'bottom',
                animation: 'scale',
                arrow: true,
                arrowType: 'sharp',
                size: 'large',
                maxWidth: '10000px'
            })
        }

        var table = document.getElementById("HTMLBody");
        var lastID = null;
        table.addEventListener("mouseover", function (e) {
            if (e.target && e.target.nodeName == "TD") {
                var target = e.target || e.srcElement;
                lastID = target.id;
                lastClass = target.className;
                functionMouseOver(lastID);

                handleTippy(lastClass, lastID);
            }
        });

        var table = document.getElementById("HTMLBody");
        var lastID = null;
        table.addEventListener("mouseout", function (e) {
            if (e.target && e.target.nodeName == "TD") {
                var target = e.target || e.srcElement;
                lastID = target.id;
                functionMouseOut(lastID);
                rearrangeStatus();
            }
        });
    </script>

</body>

</html>

0 ответов

Другие вопросы по тегам