zoukankan      html  css  js  c++  java
  • Tooltip浮动提示框效果(掌握里面的小知识)

    使用原生JavaScript设计和实现Tooltip浮动提示框特效,了解代码简化、事件绑定事件冒泡等技巧和知识。

    特效四个关键点:
    显示:鼠标移到ToolTip超链接上时,ToolTip提示框可以显示出来
    隐藏:鼠标移开时,ToolTip提示框自动隐藏
    定位:ToolTip提示框的位置需要根据ToolTip超链接的位置来设置
    可配置:ToolTip提示框可以根据参数不同,改变尺寸和显示内容

    注意点:1)border-radius和 box-shadow兼容写法

               2)不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件。对应mouseout

                    只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件。对应mouseleave

                3)W3C规定不允许内联元素嵌套块级元素 ,其中的a链接嵌套了div,可能不符合W3C标准( tip:他是移入a链接的时候在a链接中创建的div )

    简单的函数封装写法(便于引用,缩短代码量):
    1)通过元素的id获得元素的DOM引用

    1 var $ = function(id){
    2 return document.getElementById(id);
    3 }

    2)绑定事件的函数

    复制代码
    1 function addEvent(obj,event,fn){ //要绑定的元素对象,要绑定的事件,触发的回调函数
    2 if(obj.addEventListener){ //非IE,支持冒泡和捕获
    3 obj.addEventListenner(event,fn,false);
    4 }else if(obj.attachEvent){ //IE,只支持冒泡
    5 obj.attachEvent('on'+event,fn);
    6 }
    7 }
    复制代码

    效果如图:

    复制代码
      1 <!DOCTYPE html>
      2 <html>
      3 <head lang="en">
      4     <meta charset="UTF-8">
      5     <title></title>
      6 </head>
      7 <style type="text/css">
      8     body{
      9         font-size: 14px;
     10         line-height: 1.8;
     11         background: url("img/bg.jpg") no-repeat center top;
     12         font-family: "微软雅黑";
     13     }
     14     #demo{
     15          500px;
     16         margin: 30px auto;
     17         padding: 20px 30px;
     18         position: relative;
     19         background-color: #fff;
     20         border-radius: 10px;
     21         -moz-border-radius: 10px;/*这个属性 主要是专门支持Mozilla Firefox 火狐浏览器的CSS属性*/
     22         -webkit-border-radius: 10px;/*苹果;谷歌,等一些浏览器认,因为他们都用的是webkit内核*/
     23         box-shadow: 0px 0px 0px 10px rgba(0,0,0,0.2);
     24         -moz-box-shadow: 0px 0px 0px 10px rgba(0,0,0,0.2);
     25         -webkit-box-shadow: 0px 0px 0px 10px rgba(0,0,0,0.2);
     26     }
     27     #demo h2{
     28         color: #03f;
     29     }
     30     #demo .tooltip{
     31         color: #03f;
     32         cursor: help;
     33     }
     34     .tooltip-box{
     35         display: block;
     36         background: #fff;
     37         line-height: 1.6;
     38         border: 1px solid #66CCFF;
     39         color: #333;
     40         padding: 20px;
     41         font-size: 12px;
     42         border-radius: 5px;
     43         -moz-border-radius: 5px;
     44         -webkit-border-radius: 5px;
     45         overflow: auto;
     46     }
     47     #mycard img{
     48         float: left;
     49          100px;
     50         height: 100px;
     51         padding: 10px;
     52     }
     53     #mycard p{
     54         float: left;
     55          150px;
     56         padding: 0 10px;
     57     }
     58 </style>
     59 <script type="text/javascript">
     60     window.onload=function(){
     61         //绑定事件的函数
     62          function addEvent(obj,event,fn){   //要绑定的元素对象,要绑定的事件,触发的回调函数
     63             if(obj.addEventListener){            //非IE,支持冒泡和捕获
     64                 obj.addEventListener(event,fn,false);
     65             }else if(obj.attachEvent){           //IE,只支持冒泡
     66                 obj.attachEvent('on'+event,fn);
     67             }
     68         }
     69         //通过用户代理的方式判断是否是IE的方法,不能判断出IE11
     70         var isIE = navigator.userAgent.indexOf("MSIE") > -1;
     71 
     72         var $ = function(id){
     73             return document.getElementById(id);
     74         }
     75         var demo = $("demo");
     76         //obj    -  ToolTip超链接元素
     77         //id     -  ToolTip提示框id
     78         //html   -  ToolTip提示框HTML内容
     79         //width  -  ToolTip提示框宽度(可选)
     80         //height - ToolTip提示框高度(可选)
     81         function showTooltip(obj,id,html,width,height){
     82             if($(id)==null){
     83                 //创建 <div class="tooltip-box" id="xx">xxxxxxxx</div>
     84                 var toolTipBox;
     85                 toolTipBox = document.createElement('div');
     86                 toolTipBox.className = "tooltip-box";
     87                 toolTipBox.id = id;
     88                 toolTipBox.innerHTML = html;
     89                 obj.appendChild(toolTipBox);
     90                 toolTipBox.style.width = width ? width + 'px':"auto";
     91                 toolTipBox.style.height = height ? height + 'px':"auto";
     92                 if(!width && isIE){
     93                     toolTipBox.style.width = toolTipBox.offsetWidth;//因为IE不支持auto属性
     94                 }
     95                 toolTipBox.style.position = 'absolute';
     96                 toolTipBox.style.display = 'block';
     97                 var left = obj.offsetLeft;
     98                 var top = obj.offsetTop + 20;
     99                 //当浏览器窗口缩小时不让提示框超出浏览器
    100                 if(left + toolTipBox.offsetWidth > document.body.clientWidth){
    101                     var demoLeft = demo.offsetLeft;
    102                     left = document.body.clientWidth - toolTipBox.offsetWidth - demoLeft;
    103                     if(left < 0)
    104                     left = 0;
    105                 }
    106                 toolTipBox.style.left = left + 'px';
    107                 toolTipBox.style.top = top + 'px';
    108                 addEvent(obj,"mouseleave" ,function(){
    109                     setTimeout(function(){
    110                         $(id).style.display = 'none';
    111                     },300);
    112                 });
    113             }
    114             else{
    115                 //显示
    116                $(id).style.display = 'block';
    117             }
    118         }
    119         //事件冒泡
    120 addEvent(demo,'mouseover',function(e){
    121     var event = e || window.event;
    122     var target = event.target || event.srcElement;//IE下,event对象有srcElement属性,但是没有target属性;
    123     //Firefox下,event对象有target属性,但是没有srcElement属性.但他们的作用是相当的
    124     //event.srcElement:表示的当前的这个事件源。
    125     if(target.className == "tooltip"){
    126         var _html;
    127         var _id;
    128         var _width = 200;
    129         switch (target.id){
    130             case "tooltip1":
    131                 _id = "t1";
    132                 _html = "中华人民共和国";
    133                 break;
    134             case "tooltip2":
    135                 _id = "t2";
    136                 _html = "美国篮球职业联赛";
    137                 break;
    138             case "tooltip3":
    139                 _id = "t3";
    140                 _html = "<h2>春晓</h2><p>春眠不觉晓,</p><p>处处闻啼鸟。</p><p>夜来风雨声,</p><p>花落知多少。</p>";
    141                 _width = 100;
    142                 break;
    143             case "tooltip4":
    144                 _id = "t4";
    145                 _html = "<img src='img/1.jpg' width='500' /> ";
    146                 _width = 520;
    147                 break;
    148             case "tooltip5":
    149                 _id = "t5";
    150                 _html = "<div id='mycard'><img src='img/2.jpg' alt=''/><p><strong>昵称一定要长</strong></p><p>我的简介我的简介</p></div>";
    151                 _width = 300;
    152                 break;
    153             case "tooltip6":
    154                 _id = "t6";
    155                 _html = "<iframe src='http://www.imooc.com/' width='480' height='300'></iframe>";
    156                 _width = 500;
    157                 break;
    158         }
    159         showTooltip(target,_id,_html,_width);
    160     }
    161 });
    162        /* var t1 = $("tooltip1");
    163         var t2 = $("tooltip2");
    164         var t3 = $("tooltip3");
    165         var t4 = $("tooltip4");
    166         var t5 = $("tooltip5");
    167         var t6 = $("tooltip6");
    168         t1.onmouseenter = function () {
    169             showTooltip(this, "t1", '中华人民共和国', 200);
    170         };
    171         t2.onmouseenter = function () {
    172             showTooltip(this, "t2", '美国篮球职业联赛', 200);
    173         };
    174         t3.onmouseenter = function () {
    175             showTooltip(this, "t3", '<h2>春晓</h2><p>春眠不觉晓,</p><p>处处闻啼鸟。</p><p>夜来风雨声,</p><p>花落知多少。</p>', 100);
    176         };
    177         t4.onmouseenter = function () {
    178             showTooltip(this, "t4", '<img src="img/1.jpg" width="500" /> ', 520);
    179         };
    180         t5.onmouseenter = function () {
    181             var _html = '<div id="mycard"><img src="img/2.jpg" alt=""/><p><strong>昵称一定要长</strong></p><p>我的简介我的简介</p></div>';
    182             showTooltip(this, "t5", _html, 300);
    183         };
    184         t6.onmouseenter = function () {
    185             var _html = '<iframe src="http://www.imooc.com/" width="480" height="300"></iframe>'
    186             showTooltip(this, "t6", _html, 500);
    187         };*/
    188     }
    189 </script>
    190 <body>
    191 <div id="demo">
    192     <h2>原生JavaScript实现ToolTip效果</h2>
    193     <p>ToolTip效果是非常常见的网页特效,它可以在用户将指针放置在控件上时为用户显示提示信息。
    194         比如简称文字显示一行文字全称,例:<a class="tooltip" id="tooltip1">中国</a>, <a class="tooltip" id="tooltip2">NBA</a>。
    195         又比如显示一段文字,例:唐诗三百首中的<a class="tooltip" id="tooltip3">春晓</a>你会么?如果不看tooltip提示你背不出来的话,那么你
    196         可要加油了。
    197     </p>
    198     <p>
    199         ToolTip效果还可以用来显示图片,例:<a class="tooltip" id="tooltip4">西湖美景</a>。当然显示一块儿带格式的内容也不在话下,例:
    200         <a class="tooltip" id="tooltip5">我的资料</a>。
    201     </p>
    202     <p>
    203         甚至你可以显示一整个网站:例:<a class="tooltip" id="tooltip6">慕课网</a>。
    204     </p>
    205     <p>
    206         注意好的ToolTip需要考虑样式、效果、页面的边界等信息,希望你可以做出更漂亮的ToolTip效果。
    207     </p>
    208 </div>
    209 </body>
    210 </html>
  • 相关阅读:
    云栖大会2020
    云栖大会2020
    云栖大会2020
    《利用知识图提高抽象摘要的事实正确性》
    onkeyup="this.value=this.value.replace(/[^1-9]D*$/,'')"
    javamail发送excel附件
    model.org.orgId
    window.parent.returnValue
    删除了用户的org和role
    window.top.popForm()表单以窗口的形式弹出
  • 原文地址:https://www.cnblogs.com/libin-1/p/6683123.html
Copyright © 2011-2022 走看看