點(diǎn)擊方式:
點(diǎn)擊方式顯示是指點(diǎn)擊觸發(fā)元素的時候顯示Tip。 在Add程序中會給觸發(fā)元素的click事件綁定以下程序:
addEvent(elem, "click", BindAsEventListener(this, function(e){ if (trigger.ClickShow) { if (this.CheckShow(trigger)) { this.ReadyShow(trigger.ClickShowDelay); } else { clearTimeout(this._timer); }; }; }));
首先根據(jù)ClickShow判斷是否進(jìn)行點(diǎn)擊顯示,再用CheckShow檢測是否同一個觸發(fā)對象。
CheckShow程序是這樣的:
if (trigger !== this._trigger) { this.Hide(); this._trigger = trigger; return true; } else { return false; };
如果不是同一個觸發(fā)對象,就先執(zhí)行Hide清理前一個觸發(fā)對象,防止沖突,再執(zhí)行ReadyShow來顯示。 如果是同一個觸發(fā)對象,就說明當(dāng)前是延時隱藏階段,清除定時器保持顯示狀態(tài)就行了。
對應(yīng)的,點(diǎn)擊方式隱藏是指點(diǎn)擊外部元素的時候隱藏Tip。 在ReadyShow里,當(dāng)ClickHide為true時,就會把_fCH綁定到document的click事件里:
trigger.ClickHide && addEvent(document, "click", this._fCH);
注意這里要把隱藏綁定事件放到ReadyShow,而不是Show里面,因為延時的時候有可能還沒有顯示就觸發(fā)了隱藏事件。
其中_fCH是在初始化時定義的一個屬性,用于添加和移除點(diǎn)擊隱藏事件:
this._fCH = BindAsEventListener(this, function(e) { if (this.Check(e.target) && this.CheckHide()) { this.ReadyHide(this._trigger.ClickHideDelay); } });
注意不同于點(diǎn)擊顯示,由于綁定的是document,隱藏前要先確定e.target是不是外部元素。
其中CheckHide是作用是檢查Tip當(dāng)前是不是隱藏狀態(tài):
if (this._cssTip.visibility === "hidden") { clearTimeout(this._timer); removeEvent(this._trigger.Elem, "mouseout", this._fTH); this._trigger = null; removeEvent(document, "click", this._fCH); return false; } else { return true; };
如果本來就是隱藏狀態(tài),清除定時器移除事件就行,不需要再執(zhí)行Hide了。
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
上一頁 JavaScript 浮動定位提示效果 [2] 下一頁 JavaScript 浮動定位提示效果 [4]
◎進(jìn)入論壇網(wǎng)頁制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評論。
|