⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hover.js

📁 javascript 很酷的类库
💻 JS
字号:
/*
 * Isomorphic SmartClient
 * Version 6.5 (2008-04-30)
 * Copyright(c) 1998-2007 Isomorphic Software, Inc. All rights reserved.
 * "SmartClient" is a trademark of Isomorphic Software, Inc.
 *
 * licensing@smartclient.com
 *
 * http://smartclient.com/license
 */
//>	@class	Hover// The Hover class handles showing a simple SmartClient canvas containing arbitrary HTML, or// triggering some other action in response to a user holding the mouse-pointer (or hovering)// over a specific widget.//  @treeLocation Client Reference/Control//  @visibility external//< // singleton that implements//	-- hover timing//	-- hover window display//// Hover.show() / Hover.hide() and some appearance management properties exposed to allow// displaying / customizing content of hovers.// Other Hover APIs exist at the widget level, enabling custom actions in response to hover // events.isc.ClassFactory.defineClass("Hover");isc.Hover.addClassProperties({    // This delay is a default - may be overridden via the optional delay param passed to     // setAction()    	delay:500,	//timer:null,		//action:null,	//actionArgs:null,	//actionTarget:null,	//isActive:false,        //>@classAttr Hover.moveWithMouse (boolean : false : RWA)    // When the Hover canvas is shown by default, should it move as the user moves the    // mouse pointer?<br>    // May be overridden by including a <code>moveWithMouse</code> attribute on the     // properties block passed to +link{Hover.show()}    // @visibility external    //<	//moveWithMouse:false,        //>@classAttr Hover.leftOffset (number : 15 : RW)    // When positioining the hover canvas, this will be the default left offset from the     // mousepointer, if no explicit position was passed to the +link{Hover.show()} method    // @visibility external    //<	leftOffset:15,    //>@classAttr Hover.topOffset (number : 15 : RW)    // When positioining the hover canvas, this will be the default top offset from the     // mousepointer, if no explicit position was passed to the +link{Hover.show()} method    // @visibility external    //<    	topOffset:15,		//>	@classAttr	canvas.hoverCanvas		(Canvas : null : RA)	// Reference to the hoverCanvas currently visible.  Null if none.	//<		           //hoverCanvas:null,    //>	@classAttr	Hover.hoverCanvasDefaults   (object: {...} : IRW)    // Defaults to apply to the Hover canvas shown when the user hovers over some widget.    // By default this property is set to this object:<br><pre>    //       { defaultWidth:100,     //         defaultHeight:1,    //         baseStyle:"canvasHover",    //         align:"left",    //         valign:"top",    //         opacity:null    //        }    // </pre><br>    // Note that these properties can be overridden by individual widgets showing hovers, by    // modifying +link{canvas.hoverWidth}, +link{canvas.hoverHeight},     // +link{canvas.hoverStyle}, +link{canvas.hoverAlign}, +link{canvas.hoverVAlign},     // +link{canvas.hoverOpacity}, and +link{canvas.hoverWrap}.    // @visibility external    //<    hoverCanvasDefaults:{        defaultWidth:100,        defaultHeight:1,        		baseStyle:"canvasHover",        align:isc.Canvas.LEFT,		valign:isc.Canvas.TOP,        wrap:true,        		autoDraw:false        	}										});isc.Hover.addClassMethods({//>	@classMethod Hover.show()// Displays a standard Hover canvas containing the specified HTML content.<br>// This method may also be called to modify the content of the hover if it is already showing.// Call +link{Hover.hide()} to hide the canvas again.<br>// A common use case for calling this method is to asynchronously fetch detail data from the// server about some component, and display it in the Hover canvas when the data is returned.// Note that in this case you will typically need to verify that the user is still hovering // over the component in question before calling Hover.show() - if the user has moved the mouse // off the component, the information will not apply to whatever is now under the mouse. // Suggested approaches for handling this are to either use a +link{Canvas.mouseOut()} handler// to track when the user moves off the component, or checking +link{EventHandler.getTarget()}// as part of the asynchronous callback// <p>// The default Hover canvas position will be based on the mouse pointer position, adjusted by// +link{Hover.leftOffset} and +link{Hover.topOffset}. If this position would render the// Hover canvas partially clipped, it will be automatically modified to ensure the Hover // is entirely visible.// @param contents (html) contents for the hover// @param properties (object) object containing attributes for managing the hover canvas' //  appearance. Valid properties include:<ul>//  <li>left, top, width, height//  <li>baseStyle//  <li>opacity//  <li>wrap//  <li>moveWithMouse [overrides +link{Hover.moveWithMouse}]// </ul>//    // @visibility external//<// @param rect (object) boundary rectangle along which the hoverCanvas should be drawn; if//     left and top are specified in properties, this parameter is ignored// @param [targetCanvas] (Canvas) Passed in by canvas.showHover() - allows us to track which canvas//     showed the hover and handle cases such as that canvas being destroyed etc. show : function (contents, properties, rect, targetCanvas) {	// position and show hoverCanvas with contents & properties	if (!this.hoverCanvas) this._makeHoverCanvas();		var hoverCanvas = this.hoverCanvas;		// check parameters	if (contents == null || contents == "") {        hoverCanvas.hide();		return;	}        // remember which target showed the canvas    // (Cleared on hoverCanas.hide())    this.lastHoverCanvas = targetCanvas;        // set the hover to display the new contents    hoverCanvas.setContents(contents);	if (properties == null) properties = {};	    // Apply the properties to the hoverCanvas (except for positioning props)        var defaults = this.hoverCanvasDefaults;    hoverCanvas.setAlign(properties.align || defaults.align);    hoverCanvas.setVAlign(properties.valign || defaults.valign);    hoverCanvas.setBaseStyle(properties.baseStyle || defaults.baseStyle);    hoverCanvas.setOpacity(properties.opacity || defaults.opacity);    hoverCanvas.setWrap(properties.wrap != null ? properties.wrap : defaults.wrap);        // Should we move the hover canvas around with the mouse    if (properties.moveWithMouse != null) this._shouldMoveWithMouse = properties.moveWithMouse    else this._shouldMoveWithMouse = this.moveWithMouse;    	// set properties of new hoverCanvas.	// placement: by default, offset from mouse (no occlusion by mouse), and on-screen (if    //            possible).  Can be modified by the caller with attributes of the properties    //            parameter.	// note that all properties set here (aside from left/top) must be set back to defaults in    // Hover.hide()	var lastX = isc.EH.getX(),        lastY = isc.EH.getY(),        left = properties.left,        top = properties.top,        // NOTE: boolean check OK because width and height can't validly be zero		width = properties.width || defaults.defaultWidth,		height = properties.height || defaults.defaultHeight;    // If either left or top is specified in the arguments to Hover.show(), respect them and don't    // use Canvas._placeRect to adjust the position of the hover    if (left != null || top != null) {        // default left and top if they weren't specified in the properties argument        left = left ? left : lastX + this.leftOffset;        top = top ? top : lastY + this.topOffset;    } else {                //this.logWarn("sizing hover to: " + [width, height]);        hoverCanvas.setRect(null, -9999, width, height);        if (!hoverCanvas.isDrawn()) hoverCanvas.draw();        // Has to be visible as when we hide a shadow we shift it so it sits UNDER the widget.        if (!hoverCanvas.isVisible()) hoverCanvas.show();        else hoverCanvas.redrawIfDirty("placing hover");        // Use '_placeRect' to position the hover next to a boundary rectangle with the mouse         // pointer as its center, a width of 2 * this.leftOffset and a height of 2*         // this.topOffset        var avoidRect = rect ? rect : [lastX - this.leftOffset, lastY - this.topOffset,                                       2 * this.leftOffset, 2 * this.topOffset];        // call getPeerRect() to take into account dropShadow.  NOTE: technically if the hover        // had peers to the left/top expanding the peer rect, we would need to place the hover        // itself to the right/bottom of the position returned by placeRect()        var hoverRect = hoverCanvas.getPeerRect();        var pos = isc.Canvas._placeRect(hoverRect[2], hoverRect[3], avoidRect,             "bottom", false, "outside-right"        );        left = pos[0];        top = pos[1];    }	hoverCanvas.setRect(left, top, width, height);	hoverCanvas.bringToFront();			// show the hoverCanvas	if (!hoverCanvas.isDrawn() || !hoverCanvas.isVisible()) hoverCanvas.show();		// set a page-level mouseMove handler to move the hoverCanvas	if (this._shouldMoveWithMouse) {		this._mouseMoveHandler =             isc.Page.setEvent("mouseMove", function () { isc.Hover._moveWithMouse() });	}		return;},// notification fired from the hover canvas on hidehoverCanvasHidden : function () {    var lhc = this.lastHoverCanvas;    delete this.lastHoverCanvas;    if (lhc != null) {        lhc.hoverHidden();    }}//> @classMethod Hover.hide()// Hide hover hover Canvas shown via +link{Hover.show()}// @visibility external//<hide : function () {	var hoverCanvas = isc.Hover.hoverCanvas;	if (hoverCanvas != null) {		// clear the page-level mouseMove handler that moves the hoverCanvas		if (this._mouseMoveHandler) {			isc.Page.clearEvent("mouseMove", this._mouseMoveHandler);            delete this._mouseMoveHandler;		}		// hide the hoverCanvas		hoverCanvas.hide();				// move the hover offscreen to prevent page-level scrollbars if the hover extends out        // of the page.                var defaults = this.hoverCanvasDefaults;		hoverCanvas.setRect(hoverCanvas.isRTL() ? 10000 : -10000, -1000);	}},_makeHoverCanvas : function () {        var defaults = isc.addProperties({        hide : function () {            this.Super("hide", arguments);            isc.Hover.hoverCanvasHidden();        }    }, this.hoverCanvasDefaults);    	this.hoverCanvas = isc.Label.create(defaults);},_moveWithMouse : function () {        // call getPeerRect to take into account dropShadow    var hoverRect = this.hoverCanvas.getPeerRect();    var pos = isc.Canvas._placeRect(        hoverRect[2], hoverRect[3],        this.getMousePointerRect(), "bottom", false, "outside-right"    );    this.hoverCanvas.moveTo(pos[0], pos[1]);},// Return a rectangle suitable for use as the bounding rectangle along which the hover should// be drawn.//// Center point of the rectangle is the pointer location, and it extends in each direction a// length equal to the offset along the axis (so the height = 2 * topOffset, // width = 2 * leftOffset)getMousePointerRect : function () {    return [        isc.EH.getX() - this.leftOffset,        isc.EH.getY() - this.topOffset,        2 * this.leftOffset,        2 * this.topOffset    ];},//>	@classMethod Hover.setAction()//		sets the action to be executed by the hover window////		@param target (object) object to which action belongs (defaults to Hover).//		@param action (method) action to be executed when timer has elapsed.//		@param actionArgs (array) arguments for action method.//      @param [delay] (number) optional ms delay to apply to the hover action//<setAction : function (target, action, actionArgs, delay) {    if (delay == null) delay = this.delay;    // if already active or no delay, apply action immediately	if (this.isActive || delay == 0) {        // see note below about IE JS errors with empty args		action.apply((target ? target : this), actionArgs ? actionArgs : []);		this.isActive = true;	}	// otherwise set up a delayed action	else {		if (this.timer != null) this.timer = isc.Timer.clear(this.timer);		this.actionTarget = (target ? target : this);			this.action = action;        		this.actionArgs = actionArgs ? actionArgs : [];		// maybe check actionTime in _doAction()		// this.actionTime = timeStamp() + this.delay;		this.timer = isc.Timer.setTimeout({target:isc.Hover, methodName:"_doAction"}, delay);	}},_doAction : function () {	if (this.action && !this.actionTarget.destroyed) {        this.action.apply(this.actionTarget, this.actionArgs);    }    this.actionTarget = this.action = this.actionArgs = null;	this.isActive = true;},//> @classMethod Hover.clear()// If the hover canvas is currently showing, hides it via +link{Hover.hide()}// If a hover action was set up via +link{Hover.setAction()}, clear this pending action now.//<clear : function () {	this.hide();	if (this.timer != null) this.timer = isc.Timer.clear(this.timer);	this.actionTarget = this.action = this.actionArgs = null;	this.isActive = false;}});

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -