当前位置: 首页 > news >正文

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         width: 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         width: 100px;
 50         height: 100px;
 51         padding: 10px;
 52     }
 53     #mycard p{
 54         float: left;
 55         width: 150px;
 56         padding: 0 10px;
 57     }
 58 </style>
 59 <script type="text/javascript">
 60     window.οnlοad=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>

转载于:https://www.cnblogs.com/libin-1/p/6683123.html

相关文章:

  • explicit构造函数
  • 视频转GIF图
  • shell脚本专家指南--库文件
  • 大数据系列之数据仓库Hive安装
  • Linux系统下,启动Tomcat有时报Address already in use
  • 间谍网络(tarjan缩点)
  • 测试工程师的明天在哪里
  • 【php技术】PHP错误类型和屏蔽方法
  • JAVA进程占用CPU分析
  • Android - Activity生命周期
  • maven scope使用和理解
  • JavaScript数组
  • freemarker自定义标签
  • [转]使用JQuery读取XML文件数据
  • android安装
  • 【5+】跨webview多页面 触发事件(二)
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • golang中接口赋值与方法集
  • isset在php5.6-和php7.0+的一些差异
  • node.js
  • vuex 笔记整理
  • 记一次用 NodeJs 实现模拟登录的思路
  • Java性能优化之JVM GC(垃圾回收机制)
  • kubernetes资源对象--ingress
  • 积累各种好的链接
  • $.proxy和$.extend
  • $NOIp2018$劝退记
  • (2015)JS ES6 必知的十个 特性
  • (二)hibernate配置管理
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十六)串口UART
  • (算法)N皇后问题
  • (转)JAVA中的堆栈
  • .net 8 发布了,试下微软最近强推的MAUI
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net 中viewstate的原理和使用
  • .NET面试题(二)
  • .net生成的类,跨工程调用显示注释
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [.NET]桃源网络硬盘 v7.4
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [30期] 我的学习方法
  • [AAuto]给百宝箱增加娱乐功能
  • [C#]C# winform实现imagecaption图像生成描述图文描述生成
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [CERC2017]Cumulative Code
  • [flask] flask的基本介绍、flask快速搭建项目并运行
  • [Head First设计模式]策略模式
  • [HOW TO]怎么在iPhone程序中实现可多选可搜索按字母排序的联系人选择器
  • [Java性能剖析]Sun JDK基本性能剖析工具介绍
  • [LeetCode] Sort List