• tips 移入悬浮功能


    前景:

    页面部分区域需要移入悬浮效果,当然默认的 title 也是可以的,最多只是格格不入,但是却是最为靠谱的。。

    思路:

    基于 jq 实例扩展 、使用立即执行函数保持功能独立、 自定义类实现功能封装的定位解释小功能

    实现:

    1.html

    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="UTF-8" />
      <title>tip</title>
      <link rel="stylesheet" href="tip.css" />
      <link rel="stylesheet" href="animate.css" />
    </head>
    
    <body>
      <div id="left" class="test left" data-mess="top title <br /> some mes ">left</div>
    
      <script src="https://blog-static.cnblogs.com/files/justSmile2/jquery-1.9.1.min.js"></script>
      <script src="tip.js"></script>
    
      <script type="text/javascript">
        $("#left").tips({
          "posType": "right"
        });
      </script>
    </body>
    
    </html>
    View Code

    2.css

    tip.css

    .iTooltipMes {
      position: absolute;
      display: block;
      color: #000;
      font-size: 12px;
      padding: 10px;
      background: #fff;
      border: 1px solid #999;
      border-radius: 3px;
      box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.3);
      z-index: 999999;
    }
    
    
    .iToolTri {
      position: absolute;
      z-index: 1;
      display: block;
      width: 0px;
      height: 0px;
      font-size: 0px;
      line-height: 0px;
      border: 8px solid #999999;
    }
    
    .iToolTri i {
      position: absolute;
      z-index: 1;
      display: block;
      width: 0px;
      height: 0px;
      font-size: 0px;
      line-height: 0px;
      border: 6px solid #ffffff;
    
    }
    
    .iToolTriTop {
      left: 50%;
      bottom: -16px;
      margin-left: -8px;
      border-color: #999999 transparent transparent transparent;
      border-style: solid dashed dashed dashed;
    }
    
    .iToolTriTop i {
      left: -6px;
      bottom: -4px;
      border-color: #ffffff transparent transparent transparent;
      border-style: solid dashed dashed dashed;
    }
    
    .iToolTriBtm {
      left: 50%;
      top: -16px;
      margin-left: -8px;
      border-color: transparent transparent #999999 transparent;
      border-style: dashed dashed solid dashed;
    }
    
    .iToolTriBtm i {
      left: -6px;
      top: -4px;
      border-color: transparent transparent #ffffff transparent;
      border-style: dashed dashed solid dashed;
    }
    
    .iToolTriRt {
      left: -16px;
      top: 50%;
      margin-top: -8px;
      border-color: transparent #999999 transparent transparent;
      border-style: dashed solid dashed dashed;
    }
    
    .iToolTriRt i {
      left: -4px;
      top: -6px;
      border-color: transparent #ffffff transparent transparent;
      border-style: dashed solid dashed dashed;
    }
    
    
    .iToolTriLt {
      right: -16px;
      top: 50%;
      margin-top: -8px;
      border-color: transparent transparent transparent #999999;
      border-style: dashed dashed dashed solid;
    }
    
    .iToolTriLt i {
      right: -4px;
      top: -6px;
      border-color: transparent transparent transparent #ffffff;
      border-style: dashed dashed dashed solid;
    }
    
    
    
    * {
      margin: 0px;
      padding: 0px;
    }
    
    body {
      position: relative;
      height: 1500px;
      font-size: 14px;
    }
    
    .test {
      position: absolute;
      width: 100px;
      height: 30px;
      line-height: 30px;
      text-align: center;
      border: 1px solid #f0f;
      cursor: pointer;
    }
    
    .left {
      left: 10px;
      top: 10px;
    }
    
    .top {
      left: 50%;
      top: 10px;
      margin-left: -50px;
    }
    
    .right {
      right: 10px;
      top: 10px;
    }
    
    .bottom {
      left: 50%;
      bottom: 10px;
      margin-left: -50px;
    }
    
    .center {
      left: 50%;
      top: 50%;
      margin-left: -50px;
      margin-top: -15px;
    }
    View Code

    animate.css

    .animated {
      -webkit-animation-duration: 0.3s;
      animation-duration: 0.3s;
      -webkit-animation-fill-mode: both;
      animation-fill-mode: both;
    }
    
    .animated.hinge {
      -webkit-animation-duration: 0.6s;
      animation-duration: 0.6s;
    }
    
    @-webkit-keyframes fadeInDown {
      0% {
        opacity: 0;
        -webkit-transform: translateY(-20px);
        transform: translateY(-20px);
      }
    
      100% {
        opacity: 1;
        -webkit-transform: translateY(0);
        transform: translateY(0);
      }
    }
    
    @keyframes fadeInDown {
      0% {
        opacity: 0;
        -webkit-transform: translateY(-20px);
        -ms-transform: translateY(-20px);
        transform: translateY(-20px);
      }
    
      100% {
        opacity: 1;
        -webkit-transform: translateY(0);
        -ms-transform: translateY(0);
        transform: translateY(0);
      }
    }
    
    .fadeInDown {
      -webkit-animation-name: fadeInDown;
      animation-name: fadeInDown;
    }
    
    @-webkit-keyframes fadeInLeft {
      0% {
        opacity: 0;
        -webkit-transform: translateX(-20px);
        transform: translateX(-20px);
      }
    
      100% {
        opacity: 1;
        -webkit-transform: translateX(0);
        transform: translateX(0);
      }
    }
    
    @keyframes fadeInLeft {
      0% {
        opacity: 0;
        -webkit-transform: translateX(-20px);
        -ms-transform: translateX(-20px);
        transform: translateX(-20px);
      }
    
      100% {
        opacity: 1;
        -webkit-transform: translateX(0);
        -ms-transform: translateX(0);
        transform: translateX(0);
      }
    }
    
    .fadeInLeft {
      -webkit-animation-name: fadeInLeft;
      animation-name: fadeInLeft;
    }
    
    @-webkit-keyframes fadeInUp {
      0% {
        opacity: 0;
        -webkit-transform: translateY(20px);
        transform: translateY(20px);
      }
    
      100% {
        opacity: 1;
        -webkit-transform: translateY(0);
        transform: translateY(0);
      }
    }
    
    @keyframes fadeInUp {
      0% {
        opacity: 0;
        -webkit-transform: translateY(20px);
        -ms-transform: translateY(20px);
        transform: translateY(20px);
      }
    
      100% {
        opacity: 1;
        -webkit-transform: translateY(0);
        -ms-transform: translateY(0);
        transform: translateY(0);
      }
    }
    
    .fadeInUp {
      -webkit-animation-name: fadeInUp;
      animation-name: fadeInUp;
    }
    
    @-webkit-keyframes fadeInRight {
      0% {
        opacity: 0;
        -webkit-transform: translateX(20px);
        transform: translateX(20px);
      }
    
      100% {
        opacity: 1;
        -webkit-transform: translateX(0);
        transform: translateX(0);
      }
    }
    
    @keyframes fadeInRight {
      0% {
        opacity: 0;
        -webkit-transform: translateX(20px);
        -ms-transform: translateX(20px);
        transform: translateX(20px);
      }
    
      100% {
        opacity: 1;
        -webkit-transform: translateX(0);
        -ms-transform: translateX(0);
        transform: translateX(0);
      }
    }
    
    .fadeInRight {
      -webkit-animation-name: fadeInRight;
      animation-name: fadeInRight;
    }
    View Code

    3.js

    tip.js

    (function ($, window, document, undefined) {
      var pluginName = "tips",
        defaults = {
          floor: '.iTooltipMes',
          addClass: "",
          dataMess: "",
          posType: "top" //  [left|top|right|bottom]
        };
    
      function Plugin(element, options) {
        var options = $.extend(true, {}, defaults, options);
        this.opts = options;
        this.$elem = element;
        this.elem = element.selector;
        this.anis = {
          top: "fadeInDown",
          right: "fadeInLeft",
          bottom: "fadeInUp",
          left: "fadeInRight"
        };
        this.tris = {
          top: "iToolTriTop",
          right: "iToolTriRt",
          bottom: "iToolTriBtm",
          left: "iToolTriLt"
        };
        this.isOk = true;
        this.tmpPosType = null;
        this.init();
      };
    
      Plugin.prototype = {
        init: function () {
          var _this = this;
    
          $(document).on("mouseover", _this.elem, function () {
            var $this = $(this);
            if (_this.isOk) {
              _this.isOk = false;
              _this.setShow($this);
            }
          });
    
          // $(document).on("mouseover", _this.opts.floor, function () {
          //   _this.isOk = true;
          //   _this.setShow($this);
          // });
          // $(document).on("mouseout", _this.opts.floor, function () {
          //   _this.isOk = false;
          //   $(_this.opts.floor).remove();
          // });
    
          $(document).on("mouseout", _this.elem, function () {
            if (!_this.isOk) {
              _this.isOk = true;
              _this.tmpPosType = _this.opts.posType;
              $(_this.opts.floor).remove();
            }
          });
    
        },
        setShow: function (obj) {
          var _this = this;
    
          var l = obj.offset().left;
          var t = obj.offset().top;
          var w = obj.width();
          var h = obj.height();
    
          var mess = _this.opts.dataMess || obj.attr("data-mess");
    
          var tmpHtml = "<div class='iTooltipMes animated'>" + mess + "<i class='iToolTri'><i></i></i></div>";
          $("body").append(tmpHtml);
          // _this.$elem.append(tmpHtml);
    
          var iTooltipMes = $(_this.opts.floor);
          var ow = iTooltipMes.outerWidth();
          var oh = iTooltipMes.outerHeight();
    
          var tmpt = 0;
          var tmpl = 0;
          var distance = 10;
    
          var win = $(window);
          var winW = win.width();
          var winH = win.height();
          var winTop = win.scrollTop();
    
          if (t < (h + distance + winTop) && _this.opts.posType === "top") {
            _this.tmpPosType = "bottom";
          }
    
          if ((l + w + ow > winW) && _this.opts.posType === "right") {
            _this.tmpPosType = "left";
          }
    
          if ((l < ow) && _this.opts.posType === "left") {
            _this.tmpPosType = "right";
          }
    
          if (((t - winH + oh) > winTop) && _this.opts.posType === "bottom") {
            _this.tmpPosType = "top";
          }
    
    
          _this.tmpPosType = _this.tmpPosType || _this.opts.posType;
    
          switch (_this.tmpPosType) {
            case "top":
              tmpt = t - oh - distance;
              tmpl = l + ((w - ow) / 2);
              break;
            case "right":
              tmpt = t - ((oh - h) / 2);
              tmpl = l + w + distance;
              break;
            case "bottom":
              tmpt = t + h + distance;
              tmpl = l + ((w - ow) / 2);
              break;
            case "left":
              tmpt = t - ((oh - h) / 2);
              tmpl = l - ow - distance;
              break;
            default:
              break;
          }
    
          if (!!_this.opts.addClass) {
            iTooltipMes.addClass(_this.opts.addClass);
          }
    
          iTooltipMes.addClass(_this.anis[_this.tmpPosType]).css({
            left: tmpl + "px",
            top: tmpt + "px"
          }).find(".iToolTri").addClass(_this.tris[_this.tmpPosType]);
    
        }
      };
    
      $.fn[pluginName] = function () {
        $(this).selector && new Plugin(this, arguments[0])
      }
    
    })(jQuery, window, document);
    View Code
  • 相关阅读:
    5.3Role和Claims授权「深入浅出ASP.NET Core系列」
    【干货分享】可能是东半球最全的.NET Core跨平台微服务学习资源
    5.2基于JWT的令牌生成和定制「深入浅出ASP.NET Core系列」
    5.1基于JWT的认证和授权「深入浅出ASP.NET Core系列」
    4.5管道实现机制和模拟构建管道「深入浅出ASP.NET Core系列」
    4.4管道和中间件介绍「深入浅出ASP.NET Core系列」
    目录导航「深入浅出ASP.NET Core系列」
    4.3dotnet watch run「深入浅出ASP.NET Core系列」
    4.2WebHost配置「深入浅出ASP.NET Core系列」
    4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」
  • 原文地址:https://www.cnblogs.com/justSmile2/p/10691841.html
Copyright © 2020-2023  润新知