从此不再为Web页面中的Tooltip烦恼

    让Web页面中,不能折行或不希望被折行的文字始终显示在一行,是一种严格的UI风格,毕竟自由的折行会使得表格和整体界面变得很难把握。当然在一行显示不完全时配以省略号在结尾,能很好的提示用户表示语句未结束,不过这时为了让用户能看到所有文字,Tooltip就是必不可少的了。

    显示Tooltip在Web上还不是轻而易举的事情,只要把html元素的title属性设上非空字符串,就自然是Tooltip了。不过这样其实还是挺麻烦的,由于预先写入title,会带来几个副作用:1、带来不必要的内容开销,因为预置title属性,会带来文档的增大;2、总是会显示Tooltip,即使在一行能显示完全的情况下,也显示Tooltip,这样就会让用户迷惑了,还以为再补充说明什么东西呢;3、遇到Tooltip需要显示的文字里有特殊字符,比如:单引号'双引号"时,还需要在服务器端对Tooltip内容编码。

    使用客服端脚本来处理Tooltip,就可以避免上面提到的所有不足和问题。示例如下:
this is a long long long long long long long long long string. this is a long long long long long long long long long string.
this is a long long long long long long long long long string. this is a long long long long long long long long long string. this is a long long long long long long long long long string.
this is a long long long long long long long long long string. this is a long long long long long long long long long string. this is a long long long long long long long long long string.
this is a long long long long long long long long long string. this is a long long long long long long long long long string. this is a long long long long long long long long long string. this is a long long long long long long long long long string.

    // 蓝色的文字是自己本身就带有Tooltip的,你可以调整页面的大小看看Tooltip的适应性。

    原理是在body元素上统一控制,把下面的代码手工加入页面底部,或者在ASP.NET中使用Page.RegisterStartupScript方法注册到页面上。
ExpandedBlockStart.gif ContractedBlock.gif < script  language ="javascript" > dot.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
var format = 'dot.gif{0}\r\ndot.gif{1}';
InBlock.gif    
InBlock.gifdocument.body.onmouseover 
= function()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif    
var srcElmt = event.srcElement;
InBlock.gif    
if ( srcElmt && srcElmt.tagName )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if ( srcElmt.clientWidth < srcElmt.scrollWidth )
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if ( !srcElmt.__title )
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if ( srcElmt.title == srcElmt.innerText )
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
return;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
if ( srcElmt.title )
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    srcElmt.__title 
= srcElmt.title;
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            
else
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
if ( srcElmt.__title )
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                srcElmt.title 
= StringHelper.Format(format, srcElmt.__title, srcElmt.innerText);
ExpandedSubBlockEnd.gif            }

InBlock.gif            
else
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                srcElmt.title 
= srcElmt.innerText;
ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedSubBlockEnd.gif}
;
InBlock.gif
InBlock.gifdocument.body.onmouseout 
= function()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif    
var srcElmt = event.srcElement;
InBlock.gif    
if ( srcElmt && srcElmt.tagName )
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        
if ( srcElmt.clientWidth >= srcElmt.scrollWidth )
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
if ( srcElmt.__title )
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                srcElmt.title 
= srcElmt.__title;
InBlock.gif                srcElmt.__title 
= null;
ExpandedSubBlockEnd.gif            }

InBlock.gif            
else
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
if ( srcElmt.title == srcElmt.innerText )
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    srcElmt.title 
= '';
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedSubBlockEnd.gif        }

ExpandedSubBlockEnd.gif    }

ExpandedBlockEnd.gif}
;
None.gif
</ script >

    参数format用来控制当Tooltip重合的时候怎么显示,因为有的文字本身就有Tooltip,当它出现省略号的时候,就需要设计它怎么和自动的Tooltip一起显示。这样一来页面上只要使用css限制了单行的现实的文字,在出现省略号时就都自动的拥有了Tooltip,并且最重要的是,这时的Tooltip不会受任何特殊字符的影响哦 emteeth.gif

    // StringHelper.Format 方法参看 这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值