📄 fisheyelist.js
字号:
} if (this.anchorEdge == this.EDGE.TOP){ var cen2 = (y - this.proximityTop) / this.itemHeight; off_weight = (cen2 < 0.5) ? 1 : (this.totalHeight - y) / (this.proximityBottom + (this.itemHeight / 2)); } if (this.anchorEdge == this.EDGE.RIGHT){ var cen2 = (x - this.proximityLeft) / this.itemWidth; off_weight = (cen2 > 0.5) ? 1 : x / (this.proximityLeft + (this.itemWidth / 2)); } if (this.anchorEdge == this.EDGE.LEFT){ var cen2 = (x - this.proximityLeft) / this.itemWidth; off_weight = (cen2 < 0.5) ? 1 : (this.totalWidth - x) / (this.proximityRight + (this.itemWidth / 2)); } if (this.anchorEdge == this.EDGE.CENTER){ if (this.isHorizontal){ off_weight = y / (this.totalHeight); }else{ off_weight = x / (this.totalWidth); } if (off_weight > 0.5){ off_weight = 1 - off_weight; } off_weight *= 2; } // // set the sizes // for(var i=0; i<this.itemCount; i++){ var weight = this._weighAt(cen, i); if (weight < 0){weight = 0;} this._setItemSize(i, weight * off_weight); } // // set the positions // var main_p = Math.round(cen); var offset = 0; if (cen < 0){ main_p = 0; }else if (cen > this.itemCount - 1){ main_p = this.itemCount -1; }else{ offset = (cen - main_p) * ((this.isHorizontal ? this.itemWidth : this.itemHeight) - this.children[main_p].sizeMain); } this._positionElementsFrom(main_p, offset); }, _weighAt: function(/*Integer*/ cen, /*Integer*/ i){ var dist = Math.abs(cen - i); var limit = ((cen - i) > 0) ? this.children[i].effectRangeRght : this.children[i].effectRangeLeft; return (dist > limit) ? 0 : (1 - dist / limit); // Integer }, _setItemSize: function(p, scale){ scale *= this.timerScale; var w = Math.round(this.itemWidth + ((this.itemMaxWidth - this.itemWidth ) * scale)); var h = Math.round(this.itemHeight + ((this.itemMaxHeight - this.itemHeight) * scale)); if (this.isHorizontal){ this.children[p].sizeW = w; this.children[p].sizeH = h; this.children[p].sizeMain = w; this.children[p].sizeOff = h; var y = 0; if (this.anchorEdge == this.EDGE.TOP){ y = (this.children[p].cenY - (this.itemHeight / 2)); }else if (this.anchorEdge == this.EDGE.BOTTOM){ y = (this.children[p].cenY - (h - (this.itemHeight / 2))); }else{ y = (this.children[p].cenY - (h / 2)); } this.children[p].usualX = Math.round(this.children[p].cenX - (w / 2)); this.children[p].domNode.style.top = y + 'px'; this.children[p].domNode.style.left = this.children[p].usualX + 'px'; }else{ this.children[p].sizeW = w; this.children[p].sizeH = h; this.children[p].sizeOff = w; this.children[p].sizeMain = h; var x = 0; if (this.anchorEdge == this.EDGE.LEFT){ x = this.children[p].cenX - (this.itemWidth / 2); }else if (this.anchorEdge == this.EDGE.RIGHT){ x = this.children[p].cenX - (w - (this.itemWidth / 2)); }else{ x = this.children[p].cenX - (w / 2); } this.children[p].domNode.style.left = x + 'px'; this.children[p].usualY = Math.round(this.children[p].cenY - (h / 2)); this.children[p].domNode.style.top = this.children[p].usualY + 'px'; } this.children[p].domNode.style.width = w + 'px'; this.children[p].domNode.style.height = h + 'px'; if (this.children[p].svgNode){ this.children[p].svgNode.setSize(w, h); } }, _positionElementsFrom: function(p, offset){ var pos = 0; if (this.isHorizontal){ pos = Math.round(this.children[p].usualX + offset); this.children[p].domNode.style.left = pos + 'px'; }else{ pos = Math.round(this.children[p].usualY + offset); this.children[p].domNode.style.top = pos + 'px'; } this._positionLabel(this.children[p]); // // position before // var bpos = pos; for(var i=p-1; i>=0; i--){ bpos -= this.children[i].sizeMain; if (this.isHorizontal){ this.children[i].domNode.style.left = bpos + 'px'; }else{ this.children[i].domNode.style.top = bpos + 'px'; } this._positionLabel(this.children[i]); } // // position after // var apos = pos; for(var i=p+1; i<this.itemCount; i++){ apos += this.children[i-1].sizeMain; if (this.isHorizontal){ this.children[i].domNode.style.left = apos + 'px'; }else{ this.children[i].domNode.style.top = apos + 'px'; } this._positionLabel(this.children[i]); } }, _positionLabel: function(itm){ var x = 0; var y = 0; var mb = dojo.html.getMarginBox(itm.lblNode); if (this.labelEdge == this.EDGE.TOP){ x = Math.round((itm.sizeW / 2) - (mb.width / 2)); y = -mb.height; } if (this.labelEdge == this.EDGE.BOTTOM){ x = Math.round((itm.sizeW / 2) - (mb.width / 2)); y = itm.sizeH; } if (this.labelEdge == this.EDGE.LEFT){ x = -mb.width; y = Math.round((itm.sizeH / 2) - (mb.height / 2)); } if (this.labelEdge == this.EDGE.RIGHT){ x = itm.sizeW; y = Math.round((itm.sizeH / 2) - (mb.height / 2)); } itm.lblNode.style.left = x + 'px'; itm.lblNode.style.top = y + 'px'; }, _calcHitGrid: function(){ var pos = dojo.html.getAbsolutePosition(this.domNode, true); this.hitX1 = pos.x - this.proximityLeft; this.hitY1 = pos.y - this.proximityTop; this.hitX2 = this.hitX1 + this.totalWidth; this.hitY2 = this.hitY1 + this.totalHeight; //dojo.debug(this.hitX1+','+this.hitY1+' // '+this.hitX2+','+this.hitY2); }, _toEdge: function(inp, def){ return this.EDGE[inp.toUpperCase()] || def; }, _expandSlowly: function(){ // summary: slowly expand the image to user specified max size if( !this.isOver ){ return; } this.timerScale += 0.2; this._paint(); if ( this.timerScale<1.0 ) { dojo.lang.setTimeout(this, "_expandSlowly", 10); } }, destroy: function(){ // need to disconnect when we destroy dojo.event.disconnect(document.documentElement, "onmouseout", this, "_onBodyOut"); dojo.event.disconnect(document.documentElement, "onmousemove", this, "_onMouseMove"); dojo.widget.FisheyeList.superclass.destroy.call(this); }});/* * summary * Menu item inside of a FisheyeList. * See FisheyeList documentation for details on usage. */dojo.widget.defineWidget( "dojo.widget.FisheyeListItem", dojo.widget.HtmlWidget,{ // String // pathname to image file (jpg, gif, png, etc.) of icon for this menu item iconSrc: "", // String // pathname to svg file of icon for this menu item svgSrc: "", // String // label to print next to the icon, when it is moused-over caption: "", // String // will be set to the id of the orginal div element id: "", _blankImgPath: dojo.uri.dojoUri("src/widget/templates/images/blank.gif"), templateString: '<div class="dojoHtmlFisheyeListItem">' + ' <img class="dojoHtmlFisheyeListItemImage" dojoAttachPoint="imgNode" dojoAttachEvent="onMouseOver;onMouseOut;onClick">' + ' <div class="dojoHtmlFisheyeListItemLabel" dojoAttachPoint="lblNode"></div>' + '</div>', fillInTemplate: function() { // // set image // TODO: turn on/off SVG support based on browser version. // this.parent.enableCrappySvgSupport is not available to this function // if (this.svgSrc != ""){ this.svgNode = this._createSvgNode(this.svgSrc); this.domNode.appendChild(this.svgNode); this.imgNode.style.display = 'none'; } else if((this.iconSrc.toLowerCase().substring(this.iconSrc.length-4)==".png")&&(dojo.render.html.ie)&&(!dojo.render.html.ie70)){ /* we set the id of the new fisheyeListItem to the id of the div defined in the HTML */ if (dojo.dom.hasParent(this.imgNode) && this.id != ""){ var parent = this.imgNode.parentNode; parent.setAttribute("id", this.id); } this.imgNode.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.iconSrc+"', sizingMethod='scale')"; this.imgNode.src = this._blankImgPath.toString(); } else { if (dojo.dom.hasParent(this.imgNode) && this.id != ""){ var parent = this.imgNode.parentNode; parent.setAttribute("id", this.id); } this.imgNode.src = this.iconSrc; } // // Label // if ( this.lblNode ) { this.lblNode.appendChild(document.createTextNode(this.caption)); } dojo.html.disableSelection(this.domNode); }, _createSvgNode: function(src){ var elm = document.createElement('embed'); elm.src = src; elm.type = 'image/svg+xml'; //elm.style.border = '1px solid black'; elm.style.width = '1px'; elm.style.height = '1px'; elm.loaded = 0; elm.setSizeOnLoad = false; elm.onload = function(){ this.svgRoot = this.getSVGDocument().rootElement; this.svgDoc = this.getSVGDocument().documentElement; this.zeroWidth = this.svgRoot.width.baseVal.value; this.zeroHeight = this.svgRoot.height.baseVal.value; this.loaded = true; if (this.setSizeOnLoad){ this.setSize(this.setWidth, this.setHeight); } } elm.setSize = function(w, h){ if (!this.loaded){ this.setWidth = w; this.setHeight = h; this.setSizeOnLoad = true; return; } this.style.width = w+'px'; this.style.height = h+'px'; this.svgRoot.width.baseVal.value = w; this.svgRoot.height.baseVal.value = h; var scale_x = w / this.zeroWidth; var scale_y = h / this.zeroHeight; for(var i=0; i<this.svgDoc.childNodes.length; i++){ if (this.svgDoc.childNodes[i].setAttribute){ this.svgDoc.childNodes[i].setAttribute( "transform", "scale("+scale_x+","+scale_y+")" ); } } } return elm; }, onMouseOver: function(/*Event*/ e) { // summary: callback when user moves mouse over this menu item // in conservative mode, don't activate the menu until user mouses over an icon if( !this.parent.isOver ){ this.parent._setActive(e); } if ( this.caption != "" ) { dojo.html.addClass(this.lblNode, "selected"); this.parent._positionLabel(this); } }, onMouseOut: function(/*Event*/ e) { // summary: callback when user moves mouse off of this menu item dojo.html.removeClass(this.lblNode, "selected"); }, onClick: function(/*Event*/ e) { // summary: user overridable callback when user clicks this menu item }});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -