触发对象:
由于很多情况下都是一个Tip对应多个地方的提示,所以程序参考了 Table排序 的方式,添加了一个Add方法。 一个Tip实例化后,再用Add方法就可以对多个触发元素分别添加触发对象,程序中用_trigger属性表示当前的触发对象。 Add方法的一个必要参数是触发元素,就是触发显示Tip的元素。 需要的话还可以用options参数,来自定义触发对象的属性,包括:
属性: 默认值//说明 ClickShow: true,//是否点击方式显示 ClickShowDelay: false,//是否点击显示延时 ClickHide: true,//是否点击方式隐藏 ClickHideDelay: false,//是否点击隐藏延时 TouchShow: true,//是否触发方式显示 TouchShowDelay: true,//是否触发显示延时 TouchHide: true,//是否触发方式隐藏 TouchHideDelay: true,//是否触发隐藏延时 ShowDelay: 300,//显示延时时间 HideDelay: 300,//隐藏延时时间 vAlign: "clienttop",//垂直方向定位 Align: "left",//水平方向定位 Custom: { left: 0, top: 0 },//自定义定位 Percent: { left: 0, top: 0 },//自定义百分比定位 Adaptive: true,//是否自适应定位 onShow: function(){},//显示时执行 onHide: function(){}//隐藏时执行
具体作用后面再说明,可以在程序初始化时修改这些默认值。 一个经典应用是在onShow中把Tip修改为各个触发对象对应的内容。 此外还有Elem属性保存触发元素。
显示和隐藏:
提示效果的一个重点就是显示和隐藏提示信息。程序是通过设置Tip的visibility是否hidden来显示和隐藏Tip的。 具体的显示和隐藏程序分别在Show和Hide程序中,还有ReadyShow和ReadyHide程序,主要用来处理延时。
这种提示效果的一个特点是鼠标移动到Tip上时,会保持显示状态。 为了实现这个效果,给Tip的mouseover写入程序:
this.Check(e.relatedTarget) && clearTimeout(this._timer);
其中Check程序是用来判断relatedTarget是不外部元素,即鼠标离开的元素是不是外部元素。 如果是外部元素,就说明当前是隐藏延时阶段,那么只要清除定时器来取消隐藏就可以了。
这里的外部元素是指触发元素和Tip对象本身及其内部元素以外的元素。 这个有点拗口,那再看看Check程序是怎么判断的就明白了:
return !this._trigger || !( this.Tip === elem || this._trigger.Elem === elem || Contains(this.Tip, elem) || Contains(this._trigger.Elem, elem) );
首先判断_trigger是否存在,不存在的话说明是刚开始触发,也看成是外部触发。 存在的话再判断传递过来的元素是不是Tip或触发元素本身,最后再用Contains判断判断是不是在Tip或触发元素内部。 ps:关于Contains请参考这里的比较文档位置。 这样得到的是判断是否内部元素,最后取反就是判断是否外部元素了。
出处:蓝色理想
责任编辑:bluehearts
上一页 JavaScript 浮动定位提示效果 [1] 下一页 JavaScript 浮动定位提示效果 [3]
◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
|