📄 hovermenubehavior.js
字号:
// (c) Copyright Microsoft Corporation.
// This source is subject to the Microsoft Permissive License.
// See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx.
// All other rights reserved.
/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />
/// <reference path="../DynamicPopulate/DynamicPopulateBehavior.js" />
/// <reference path="../HoverExtender/HoverBehavior.js" />
/// <reference path="../Compat/Timer/Timer.js" />
/// <reference path="../Animation/Animations.js" />
/// <reference path="../Animation/AnimationBehavior.js" />
/// <reference path="../PopupExtender/PopupBehavior.js" />
Type.registerNamespace('AjaxControlToolkit');
AjaxControlToolkit.HoverMenuBehavior = function(element) {
/// <summary>
/// The HoverMenuBehavior is used to display a popup whenever the target is hovered over
/// </summary>
/// <param name="element" type="Sys.UI.DomElement" domElement="true">
/// DOM element the behavior is associated with
/// </param>
AjaxControlToolkit.HoverMenuBehavior.initializeBase(this, [element]);
// Encapsulated behaviors
this._hoverBehavior = null;
this._popupBehavior = null;
// Handler delegates
this._mouseEnterHandler = null;
this._mouseLeaveHandler = null;
this._unhoverHandler = null;
this._hoverHandler = null;
// State variables
this._inHover = null;
this._oldClass = null;
this._popupElement = null;
this._onShowJson = null;
this._onHideJson = null;
// Property values
this._popupElement = null;
this._hoverCssClass = null;
this._offsetX = 0;
this._offsetY = 0;
this._popDelay = 100;
this._popupPosition = null;
}
AjaxControlToolkit.HoverMenuBehavior.prototype = {
initialize : function() {
/// <summary>
/// Initialize the behavior
/// </summary>
AjaxControlToolkit.HoverMenuBehavior.callBaseMethod(this, 'initialize');
// set up our delegates and handlers
this._hoverHandler = Function.createDelegate(this, this._onHover);
this._unhoverHandler = Function.createDelegate(this, this._onUnhover);
this._mouseEnterHandler = Function.createDelegate(this, this._onmouseover);
this._mouseLeaveHandler = Function.createDelegate(this, this._onmouseout);
var e = this.get_element();
$addHandler(e, "mouseover", this._mouseEnterHandler);
$addHandler(e, "mouseout", this._mouseLeaveHandler);
if (this._popupElement) {
// setup the popup behavior
this._popupBehavior = $create(AjaxControlToolkit.PopupBehavior, { "id":this.get_id()+"_PopupBehavior" }, null, null, this._popupElement);
if (this._popupPosition) {
this._popupBehavior.set_positioningMode(AjaxControlToolkit.HoverMenuPopupPosition.Absolute);
} else {
this._popupBehavior.set_positioningMode(AjaxControlToolkit.HoverMenuPopupPosition.Center);
}
// Create the animations (if they were set before initialize was called)
if (this._onShowJson) {
this._popupBehavior.set_onShow(this._onShowJson);
}
if (this._onHideJson) {
this._popupBehavior.set_onHide(this._onHideJson);
}
// set up the hover behavior
this._hoverBehavior = $create(AjaxControlToolkit.HoverBehavior, { "id":this.get_id()+"_HoverBehavior", "unhoverDelay":this._popDelay, "hoverElement":this._popupElement }, null, null, e);
this._hoverBehavior.add_hover(this._hoverHandler);
this._hoverBehavior.add_unhover(this._unhoverHandler);
}
},
dispose : function() {
/// <summary>
/// Dispose the behavior
/// </summary>
// do cleanup
this._onShowJson = null;
this._onHideJson = null;
if (this._popupBehavior) {
this._popupBehavior.dispose();
this._popupBehavior = null;
}
if (this._popupElement) {
this._popupElement = null;
}
if (this._mouseEnterHandler) {
$removeHandler(this.get_element(), "mouseover", this._mouseEnterHandler);
}
if (this._mouseLeaveHandler) {
$removeHandler(this.get_element(), "mouseout", this._mouseLeaveHandler);
}
if (this._hoverBehavior) {
if (this._hoverHandler) {
this._hoverBehavior.remove_hover(this._hoverHandler);
this._hoverHandler = null;
}
if (this._unhoverHandler) {
this._hoverBehavior.remove_hover(this._unhoverHandler);
this._unhoverHandler = null;
}
this._hoverBehavior.dispose();
this._hoverBehavior = null;
}
AjaxControlToolkit.HoverMenuBehavior.callBaseMethod(this, 'dispose');
},
_getLeftOffset : function() {
/// <summary>
/// Get the left offset of the popup
/// </summary>
/// <returns type="Number" integer="true">
/// Left offset of the popup (in pixels)
/// </returns>
var defaultLeft = $common.getLocation(this.get_element()).x;
var offsetLeft = $common.getLocation(this.get_popupElement().offsetParent).x;
var delta = 0;
// this offset is always relative to the left edge of the hover element.
switch(this._popupPosition) {
case AjaxControlToolkit.HoverMenuPopupPosition.Left:
// if it's positioned left, it's the width of the popup plus the offset
delta = (-1 * this._popupElement.offsetWidth);
break;
case AjaxControlToolkit.HoverMenuPopupPosition.Right:
// if it's to the right, it's the width of the hover element plus the offset.
delta = this.get_element().offsetWidth;
break;
}
return delta + defaultLeft - offsetLeft + this._offsetX;
},
_getTopOffset : function() {
/// <summary>
/// Get the top offset of the popup
/// </summary>
/// <returns type="Number" integer="true">
/// Left offset of the popup (in pixels)
/// </returns>
var defaultTop = $common.getLocation(this.get_element()).y;
var offsetTop = $common.getLocation(this.get_popupElement().offsetParent).y;
var delta = 0;
// this offset is always relative to the top edge of the hover element.
switch(this._popupPosition) {
case AjaxControlToolkit.HoverMenuPopupPosition.Top:
// if it's Top positioned, it's the height of the popup plus the offset.
delta = (-1 * this._popupElement.offsetHeight);
break;
case AjaxControlToolkit.HoverMenuPopupPosition.Bottom:
// if it's bottom positioned it's the height of the hover element plus the offset
delta = this.get_element().offsetHeight;
break;
}
return defaultTop - offsetTop + delta + this._offsetY;
},
_onHover : function() {
/// <summary>
/// Display the popup when the target is hovered over
/// </summary>
if (this._inHover) return;
var eventArgs = new Sys.CancelEventArgs();
this.raiseShowing(eventArgs);
if (eventArgs.get_cancel()) {
return;
}
this._inHover = true;
this.populate();
this._popupBehavior.show();
if ($common.getCurrentStyle(this._popupElement, 'display') == 'none') {
this._popupElement.style.display = 'block';
}
this._popupBehavior.set_x(this._getLeftOffset());
this._popupBehavior.set_y(this._getTopOffset());
this.raiseShown(Sys.EventArgs.Empty);
},
_onUnhover : function() {
/// <summary>
/// Hide the popup when the target is no longer hovered
/// </summary>
var eventArgs = new Sys.CancelEventArgs();
this.raiseHiding(eventArgs);
if (eventArgs.get_cancel()) {
return;
}
this._inHover = false;
this._resetCssClass();
this._popupBehavior.hide();
this.raiseHidden(Sys.EventArgs.Empty);
},
_onmouseover : function() {
/// <summary>
/// Handler to change the CSS class when hovered over
/// </summary>
// set up the CSS class
var e = this.get_element();
if (this._hoverCssClass && e.className != this._hoverCssClass) {
this._oldClass = e.className;
e.className = this._hoverCssClass;
}
},
_onmouseout : function() {
/// <summary>
/// Handler to reset the CSS class when no longer hovering
/// </summary>
this._resetCssClass();
},
_resetCssClass : function() {
/// <summary>
/// Reset the CSS class if we changed it while hovering
/// </summary>
// make sure we're not still in hover mode, and that the class is
// currently the hover class.
var e = this.get_element();
if (!this._inHover && this._hoverCssClass && e.className == this._hoverCssClass) {
e.className = this._oldClass;
}
},
get_onShow : function() {
/// <value type="String" mayBeNull="true">
/// Generic OnShow Animation's JSON definition
/// </value>
return this._popupBehavior ? this._popupBehavior.get_onShow() : this._onShowJson;
},
set_onShow : function(value) {
if (this._popupBehavior) {
this._popupBehavior.set_onShow(value)
} else {
this._onShowJson = value;
}
this.raisePropertyChanged('onShow');
},
get_onShowBehavior : function() {
/// <value type="AjaxControlToolkit.Animation.GenericAnimationBehavior">
/// Generic OnShow Animation's behavior
/// </value>
return this._popupBehavior ? this._popupBehavior.get_onShowBehavior() : null;
},
onShow : function() {
/// <summary>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -