jquery实现标签悬浮标注效果代码

代码语言:html

所属分类:其他

代码描述:jquery实现标签悬浮标注效果代码

代码标签: jquery 标签 悬浮 标注

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

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

<head>
   
<meta charset="UTF-8">

<style>
html
,body {
       
width:100%;
       
height:100%;
       
overflow:hidden;
       
margin:0;
       
padding:0;
       
font-family:NotoSansJP,Slack-Lato,appleLogo,sans-serif
}
.wrapper {
       
width:100%;
       
height:100%;
       
background-color:#808080
}
.wrapper::after {
       
content:".";
       
display:block;
       
height:0;
       
font-size:0;
       
clear:both;
       
visibility:hidden
}
.menu-wrapper {
       
box-sizing:border-box;
       
float:left;
       
width:18vw;
       
height:100%;
       
overflow-y:scroll
}
.menu {
       
box-sizing:border-box;
       
list-style:none;
       
width:100%;
       
margin:0;
       
padding:10px;
       
font-size:1.1vw
}
.menu>li {
       
box-sizing:border-box;
       
width:100%;
       
height:100%;
       
margin:0;
       
padding:0
}
.menu>li+li {
       
margin-top:10px
}
.menu>li>a {
       
box-sizing:border-box;
       
display:inline-block;
       
width:100%;
       
height:100%;
        line-height
1.5em;
       
padding:5px 10px;
       
text-decoration:none;
       
background-color:#40AAEF;
       
color:#FFF;
       
border-radius:4px;
       
box-shadow:0 4px 0 rgba(0,0,0,0.7);
       
transition:.2s all ease 0s
}
.menu>li>a.selected {
       
background-color:#0E7AC4;
       
box-shadow:none;
       
transform:translate3d(0,3px,0)
}
.container {
       
position:relative;
       
float:left;
       
width:calc(100% - 18vw);
       
height:100%
}
.tooltip {
       
display:none;
       
position:absolute;
       
top:0;
       
left:0;
       
margin:0;
       
padding:0;
       
font-size:1.1vw;
       
line-height:1.8em;
       
color:#FFF
}
.tooltip>dt {
       
margin:0;
       
padding:0 .5em;
       
background-color:#16A085
}
.tooltip>dd {
       
margin:0;
       
padding:0 .5em 0 2em;
       
background-color:#1ABC9C
}
.tooltip>dd+dd {
       
border-top:solid 1px #16A085
}

</style>
</head>

<body>
   
<!-- partial:index.partial.html -->
   
<div class="wrapper">
       
<div class="menu-wrapper">
           
<ul id="jsi-category-container" class="menu">
               
<li><a href="1">metadata content</a></li>
               
<li><a href="2">flow content</a></li>
               
<li><a href="3">sectioning content</a></li>
               
<li><a href="4">heading content</a></li>
               
<li><a href="5">phrasing content</a></li>
               
<li><a href="6">embedded content</a></li>
               
<li><a href="7">interactive content</a></li>
               
<li><a href="8">palpable content</a></li>
               
<li><a href="9">sectioning root</a></li>
               
<li><a href="10">form-associated elements</a></li>
               
<li><a href="11">listed elements</a></li>
               
<li><a href="12">submittable elements</a></li>
               
<li><a href="13">resettable elements</a></li>
               
<li><a href="14">labelable elements</a></li>
               
<li><a href="15">reassociateable elements</a></li>
               
<li><a href="16">script-supporting elements</a></li>
           
</ul>
       
</div>
       
<div id="jsi-elements-container" class="container">
           
<dl id="jsi-tooltip-container" class="tooltip"><dt>categories</dt>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd>
               
<dd class="jsc-tip-category"></dd><dt>content models</dt>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
               
<dd class="jsc-tip-contents-model"></dd>
           
</dl>
       
</div>
   
</div>
   
<!-- partial -->
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/jquery-3.2.1.min.js"></script>
   
<script>
var RENDERER = {
    PADDING: 0.05,
    init: function(a, b) {
        this.setParameters(a);
        this.reconstructMethods();
        this.adjustContainer();
        this.createElements(b);
        this.bindEvent();
        this.render()
    },
    setParameters: function(a) {
        this.categoryData = a;
        this.$window = $(window);
        this.$container = $("#jsi-elements-container");
        this.$categoryContainer = $("#jsi-category-container");
        this.$categoryWrapper = this.$categoryContainer.parent();
        this.$categories = this.$categoryContainer.find("a");
        this.$tipContainer = $("#jsi-tooltip-container");
        this.$tipCategories = this.$tipContainer.find(".jsc-tip-category");
        this.$tipContents = this.$tipContainer.find(".jsc-tip-contents-model");
        this.width = this.$container.width();
        this.height = this.$container.height();
        this.$canvas = $("
<canvas />");
        this.context = this.$canvas.attr({
            width: this.width,
            height: this.height
        }).appendTo(this.$container).get(0).getContext("2d");
        this.selectedIndices = this.$categories.filter(".selected").map(function() {
            return parseInt($(this).attr("href"))
        });
        this.animationCount = 0;
        this.elements = []
    },
    adjustContainer: function() {
        this.width = this.$container.width();
        this.height = this.$container.height();
        this.elementWidth = this.width * (1 - this.PADDING * 2) / 8;
        this.elementWidth += this.elementWidth / 8;
        this.elementHeight = this.elementWidth / 4;
        var b = 20 * this.width / 1200;
        if (this.elementHeight * 14.5 > this.height * (1 - this.PADDING * 2)) {
            this.elementHeight = this.height * (1 - this.PADDING * 2) / 14.5;
            b = 20 * this.height / 600
        }
        this.font = "400 " + b + 'px "HG正楷書体-PRO"';
        this.$canvas.attr({
            width: this.width,
            height: this.height
        });
        this.$categoryWrapper.css("overflow-y", (this.$categoryContainer.height() > this.$categoryWrapper.height() ? "scroll" : "hidden"));
        var a = Math.sqrt(Math.pow(this.width, 2) + Math.pow(this.height, 2));
        this.gradient = this.context.createRadialGradient(this.width / 2, this.height / 2, 0, this.width / 2, this.height / 2, a);
        this.gradient.addColorStop(0, "hsl(220, 80%, 40%)");
        this.gradient.addColorStop(1, "hsl(220, 80%, 10%)");
        for (var c = 0, d = this.elements.length; c < d; c++) {
            this.elements[c].init()
        }
    },
    createElements: function(a) {
        for (var b = 0, c = a.length; b < c; b++) {
            this.elements.push(new ELEMENT(this, a[b], b, this.selectedIndices))
        }
    },
    reconstructMethods: function() {
        this.render = this.render.bind(this)
    },
    bindEvent: function() {
        var a = this;
        this.$categories.each(function(c) {
            var b = $(this);
            b.on("click", a.selectCategory.bind(a, c))
        });
        this.$window.on("resize", this.adjustContainer.bind(this));
        this.$container.on("mouseleave mouseenter mousemove", this.checkMousePosition.bind(this))
    },
    selectCategory: function(c, a) {
        a.preventDefault();
        if (this.$categories.eq(c).hasClass("selected")) {
            this.$categories.eq(c).removeClass("selected");
            for (var b = 0, d = this.selectedIndices.length; b < d; b++) {
                if (this.selectedIndices[b] == c + 1) {
                    this.selectedIndices.splice(b, 1);
                    break
                }
            }
        } else {
            this.$categories.eq(c).addClass("selected");
            this.selectedIndices.push(c + 1)
        }
        for (var b = 0, d = this.elements.length; b < d; b++) {
            this.elements[b].transform(this.selectedIndices)
        }
    },
    checkMousePosition: function(b) {
        var a = this.$container.offset(),
            e = b.clientX - a.left + this.$window.scrollLeft(),
            f = b.clientY - a.top + this.$window.scrollTop();
        for (var c = 0, d = this.elements.length; c < d; c++) {
            this.elements[c].checkMousePosition(e, f)
        }
    },
    showToolTip: function(b, a) {
        this.context.fillStyle = "hsla(0, 0%, 0%, 0.5)";
        this.context.fillRect(0, 0, this.width, this.height);
        this.$tipContainer.show();
        this.$tipCategories.hide();
        this.$tipContents.hide();
        for (var c = 0, f = b.categories.length; c < f; c++) {
            this.$tipCategories.eq(c).text(this.categoryData[b.categories[c]]).show()
        }
        if (b.categories.length == 0) {
            this.$tipCategories.eq(0).text("none").show()
        }
        var d = 0;
        for (var c = 0, f = b.contents.categories.length; c < f; c++) {
            this.$tipContents.eq(d++).text(this.categoryData[b.contents.categories[c]]).show()
        }
        for (var c = 0, f = b.contents.tags.length; c < f; c++) {
            this.$tipContents.eq(d++).text("<" + b.contents.tags[c] + ">").show()
        }
        if (d == 0) {
            this.$tipContents.eq(0).text("none").show()
        }
        var h = this.$tipContainer.outerWidth(),
            g = this.$tipContainer.outerHeight(),
            e = (a.x <= this.width / 2) ?.........完整代码请登录后点击上方下载按钮下载查看

网友评论0