Page 41 - JavaScript修炼之道
P. 41

任务12  打造漂亮的tooltip        29


                   tooltip的HTML代码

                    ui/tooltips/index.html

                   <li tabindex="1">
                     <span class="name">Capacity: 1.5 TB</span>
                     <div class="tooltip" >
                       <p><strong>1.5 Terabyte = 1,536 Gigabytes</strong></p>
                       <p>Enough for 50,000 songs, 1,000 DivX movies, 100,000
                         high-definition photos, hundreds of iDVD projects and
                         plenty of backup space left.</p>
                     </div>
                   </li>
                   设置tooltip样式

                    ui/tooltips/tooltips.css

                   #files li { position: relative; }
                   #files li .tooltip {
                     position: absolute; top: 8px; left: 120px; width: 24em;
                     z-index: 1; display: none;
                     /* IE6不识别 li:hover, 所以我们需要用JS触发,
                        因此避免使用内置的display: none */
                     _display: block;
                     border: 1px solid gray;
                     background: #fffdc3 url(bg_tooltip.png) top left repeat-x;
                   }
                   #files li:hover .tooltip,
                   #files li:focus .tooltip { display: block; }

                   处理IE6的脚本(IE6中:hover只对链接有效)

                    ui/tooltips/tooltips.js

                   function toggle(reveal, e) {
                     var trigger = e.findElement('li'),
                       tooltip = trigger && trigger.down('.tooltip');
                     if (!tooltip) return;
                     tooltip[reveal ? 'show' : 'hide']();
                   }

                   document.observe('dom:loaded', function() {
                     var isIE6 = Prototype.Browser.IE &&
                       undefined === document.body.style.maxHeight;
                     if (!isIE6) return;
                     var files = $('files'), tooltips = files && files.select('.tooltip');
                     if (!files || 0 == tooltips.length) return;
                     tooltips.invoke('hide');
                     files.observe('mouseover', toggle.curry(true)).
                       observe('mouseout', toggle.curry(false));
                   });
   36   37   38   39   40   41   42   43   44   45   46