📄 slider.js
字号:
/* Copyright (c) 2004-2006, The Dojo Foundation All Rights Reserved. Licensed under the Academic Free License version 2.1 or above OR the modified BSD license. For more information on Dojo licensing, see: http://dojotoolkit.org/community/licensing.shtml*/dojo.provide("dojo.widget.Slider");dojo.require("dojo.event.*");dojo.require("dojo.dnd.*");dojo.require("dojo.dnd.HtmlDragMove");dojo.require("dojo.widget.*");dojo.require("dojo.html.layout");dojo.widget.defineWidget("dojo.widget.Slider", dojo.widget.HtmlWidget, {minimumX:0, minimumY:0, maximumX:10, maximumY:10, snapValuesX:0, snapValuesY:0, _snapToGrid:true, isEnableX:true, isEnableY:true, _valueSizeX:0, _valueSizeY:0, _minX:0, _minY:0, _constraintWidth:0, _constraintHeight:0, _clipLeft:0, _clipRight:0, _clipTop:0, _clipBottom:0, _clipXdelta:0, _clipYdelta:0, initialValueX:0, initialValueY:0, flipX:false, flipY:false, clickSelect:true, activeDrag:false, templateCssString:".sliderMain {\n border: 0px !important;\n border-spacing: 0px !important;\n line-height: 0px !important;\n padding: 0px !important;\n display: -moz-inline-table !important;\n display: inline !important;\n -moz-user-focus: normal !important;\n}\n\n.sliderComponent {\n border: 0px;\n padding: 0px;\n margin: 0px;\n}\n\n.sliderHandle { \n top: 0px;\n left: 0px;\n z-index: 1000;\n position: absolute !important;\n}\n\n.sliderOutsetButton { \n border-style: outset;\n border-width: 0px 1px 1px 0px;\n border-color: black;\n}\n\n.sliderInsetButton { \n border-style: inset;\n border-width: 1px 0px 0px 1px;\n border-color: black;\n}\n\n.sliderButtonY {\n margin: 0px;\n padding: 0px;\n z-index: 900;\n}\n\n.sliderButtonX {\n margin: 0px;\n padding: 0px;\n z-index: 900;\n}\n\n.sliderBackground { \n z-index: 0;\n display: block !important;\n position: relative !important;\n}\n\n.sliderProgressBackground { \n z-index: 800;\n position: absolute !important;\n clip: rect(0px,0px,0px,0px);\n}\n\n.sliderBackgroundSizeOnly { \n}\n", templateCssPath:dojo.uri.moduleUri("dojo.widget", "templates/Slider.css"), templateString:"<table _=\"weird end tag formatting is to prevent whitespace from becoming \" \n\tclass=\"sliderMain\" \n\tdojoAttachPoint=\"focusNode\" \n\tdojoAttachEvent=\"onmousedown:_setFocus; onkey:_handleKeyEvents; onkeyup:_buttonReleased; onmouseup:_buttonReleased; onmousewheel:_mouseWheeled;\"\n\ttabindex=\"0\" cols=3 cellpadding=0 cellspacing=0 style=\"\">\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" colspan=3 dojoAttachPoint=topBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonY\"\n\t\t\t\tdojoAttachPoint=topButtonNode \n\t\t\t\tdojoAttachEvent=\"onmousedown:_topButtonPressed; onmousemove:_discardEvent; ondblclick:_topButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.topButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleY}\"\n\t\t></td>\n\t</tr>\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" dojoAttachPoint=leftBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonX\"\n\t\t\t\tdojoAttachPoint=leftButtonNode\n\t\t\t\tdojoAttachEvent=\"onmousedown:_leftButtonPressed; onmousemove:_discardEvent; ondblclick:_leftButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.leftButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleX}\"\n\t\t></td>\n\t\t<td dojoAttachPoint=constrainingContainerNode \n\t\t\tclass=\"sliderComponent sliderBackground\"\n\t\t\tstyle=\"${this.backgroundStyle}\"\n\t\t\t><img src=\"${this.handleSrc}\" \n\t\t\t\tclass=sliderHandle\n\t\t\t\tdojoAttachPoint=sliderHandleNode\n\t\t\t\tstyle=\"${this.handleStyle}\"\n\t\t\t><img src=\"${this.progressBackgroundSrc}\"\n\t\t\t\tclass=\"sliderBackgroundSizeOnly sliderProgressBackground\"\n\t\t\t\tdojoAttachPoint=progressBackgroundNode\n\t\t\t\tstyle=\"${this.backgroundSize}\"\n\t\t\t><img src=\"${this.backgroundSrc}\" \n\t\t\t\tclass=sliderBackgroundSizeOnly\n\t\t\t\tdojoAttachPoint=sliderBackgroundNode\n\t\t\t\tstyle=\"${this.backgroundSize}\"\n\t\t></td>\n\t\t<td class=\"sliderComponent\" dojoAttachPoint=rightBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonX\"\n\t\t\t\tdojoAttachPoint=rightButtonNode\n\t\t\t\tdojoAttachEvent=\"onmousedown:_rightButtonPressed; onmousemove:_discardEvent; ondblclick:_rightButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.rightButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleX}\"\n\t\t></td>\n\t</tr>\n\t<tr valign=middle align=center>\n\t\t<td class=\"sliderComponent\" colspan=3 dojoAttachPoint=bottomBorderNode style=\"\"\n\t\t\t><img class=\"sliderOutsetButton sliderButtonY\"\n\t\t\t\tdojoAttachPoint=bottomButtonNode \n\t\t\t\tdojoAttachEvent=\"onmousedown:_bottomButtonPressed; onmousemove:_discardEvent; ondblclick:_bottomButtonDoubleClicked;\"\n\t\t\t\tsrc=\"${this.bottomButtonSrc}\" \n\t\t\t\tstyle=\"${this.buttonStyleY}\"\n\t\t></td>\n\t</tr>\n</table>\n", _isDragInProgress:false, bottomButtonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider_down_arrow.png"), topButtonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider_up_arrow.png"), leftButtonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider_left_arrow.png"), rightButtonSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider_right_arrow.png"), backgroundSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif"), progressBackgroundSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/blank.gif"), backgroundSize:"width:200px;height:200px;", backgroundStyle:"", buttonStyleX:"", buttonStyleY:"", handleStyle:"", handleSrc:dojo.uri.moduleUri("dojo.widget", "templates/images/slider-button.png"), showButtons:true, _eventCount:0, _typamaticTimer:null, _typamaticFunction:null, defaultTimeout:500, timeoutChangeRate:0.9, _currentTimeout:this.defaultTimeout, _handleKeyEvents:function (evt) { if (!evt.key) { return; } if (!evt.ctrlKey && !evt.altKey) { switch (evt.key) { case evt.KEY_LEFT_ARROW: dojo.event.browser.stopEvent(evt); this._leftButtonPressed(evt); return; case evt.KEY_RIGHT_ARROW: dojo.event.browser.stopEvent(evt); this._rightButtonPressed(evt); return; case evt.KEY_DOWN_ARROW: dojo.event.browser.stopEvent(evt); this._bottomButtonPressed(evt); return; case evt.KEY_UP_ARROW: dojo.event.browser.stopEvent(evt); this._topButtonPressed(evt); return; } } this._eventCount++;}, _pressButton:function (buttonNode) { buttonNode.className = buttonNode.className.replace("Outset", "Inset");}, _releaseButton:function (buttonNode) { buttonNode.className = buttonNode.className.replace("Inset", "Outset");}, _buttonPressed:function (evt, buttonNode) { this._setFocus(); if (typeof evt == "object") { if (this._typamaticTimer != null) { if (this._typamaticNode == buttonNode) { return; } clearTimeout(this._typamaticTimer); } this._buttonReleased(null); this._eventCount++; this._typamaticTimer = null; this._currentTimeout = this.defaultTimeout; dojo.event.browser.stopEvent(evt); } else { if (evt != this._eventCount) { this._buttonReleased(null); return false; } } if (buttonNode == this.leftButtonNode && this.isEnableX) { this._snapX(dojo.html.getPixelValue(this.sliderHandleNode, "left") - this._valueSizeX); } else { if (buttonNode == this.rightButtonNode && this.isEnableX) { this._snapX(dojo.html.getPixelValue(this.sliderHandleNode, "left") + this._valueSizeX); } else { if (buttonNode == this.topButtonNode && this.isEnableY) { this._snapY(dojo.html.getPixelValue(this.sliderHandleNode, "top") - this._valueSizeY); } else { if (buttonNode == this.bottomButtonNode && this.isEnableY) { this._snapY(dojo.html.getPixelValue(this.sliderHandleNode, "top") + this._valueSizeY); } else { return false; } } } } this._pressButton(buttonNode); this.notifyListeners(); this._typamaticNode = buttonNode; this._typamaticTimer = dojo.lang.setTimeout(this, "_buttonPressed", this._currentTimeout, this._eventCount, buttonNode); this._currentTimeout = Math.round(this._currentTimeout * this.timeoutChangeRate); return false;}, _bottomButtonPressed:function (evt) { return this._buttonPressed(evt, this.bottomButtonNode);}, _bottomButtonDoubleClicked:function (evt) { var rc = this._bottomButtonPressed(evt); dojo.lang.setTimeout(this, "_buttonReleased", 50, null); return rc;}, _topButtonPressed:function (evt) { return this._buttonPressed(evt, this.topButtonNode);}, _topButtonDoubleClicked:function (evt) { var rc = this._topButtonPressed(evt); dojo.lang.setTimeout(this, "_buttonReleased", 50, null); return rc;}, _leftButtonPressed:function (evt) { return this._buttonPressed(evt, this.leftButtonNode);}, _leftButtonDoubleClicked:function (evt) { var rc = this._leftButtonPressed(evt); dojo.lang.setTimeout(this, "_buttonReleased", 50, null); return rc;}, _rightButtonPressed:function (evt) { return this._buttonPressed(evt, this.rightButtonNode);}, _rightButtonDoubleClicked:function (evt) { var rc = this._rightButtonPressed(evt); dojo.lang.setTimeout(this, "_buttonReleased", 50, null); return rc;}, _buttonReleased:function (evt) { if (typeof evt == "object" && evt != null && typeof evt.keyCode != "undefined" && evt.keyCode != null) { var keyCode = evt.keyCode; switch (keyCode) { case evt.KEY_LEFT_ARROW: case evt.KEY_RIGHT_ARROW: case evt.KEY_DOWN_ARROW: case evt.KEY_UP_ARROW: dojo.event.browser.stopEvent(evt); break; } } this._releaseButton(this.topButtonNode); this._releaseButton(this.bottomButtonNode); this._releaseButton(this.leftButtonNode); this._releaseButton(this.rightButtonNode); this._eventCount++; if (this._typamaticTimer != null) { clearTimeout(this._typamaticTimer); } this._typamaticTimer = null; this._currentTimeout = this.defaultTimeout;}, _mouseWheeled:function (evt) { var scrollAmount = 0; if (typeof evt.wheelDelta == "number") { scrollAmount = evt.wheelDelta; } else { if (typeof evt.detail == "number") { scrollAmount = -evt.detail; } } if (this.isEnableY) { if (scrollAmount > 0) { this._topButtonPressed(evt); this._buttonReleased(evt); } else { if (scrollAmount < 0) { this._bottomButtonPressed(evt); this._buttonReleased(evt); } } } else { if (this.isEnableX) { if (scrollAmount > 0) { this._rightButtonPressed(evt); this._buttonReleased(evt); } else { if (scrollAmount < 0) { this._leftButtonPressed(evt); this._buttonReleased(evt); } } } }}, _discardEvent:function (evt) { dojo.event.browser.stopEvent(evt);}, _setFocus:function () { if (this.focusNode.focus) { this.focusNode.focus(); }}, fillInTemplate:function (args, frag) { var source = this.getFragNodeRef(frag); dojo.html.copyStyle(this.domNode, source); var padding = this.domNode.style.padding; if (dojo.lang.isString(padding) && padding != "" && padding != "0px" && padding != "0px 0px 0px 0px") { this.topBorderNode.style.padding = this.bottomBorderNode.style.padding = padding; this.topBorderNode.style.paddingBottom = "0px"; this.bottomBorderNode.style.paddingTop = "0px"; this.rightBorderNode.style.paddingRight = this.domNode.style.paddingRight; this.leftBorderNode.style.paddingLeft = this.domNode.style.paddingLeft; this.domNode.style.padding = "0px 0px 0px 0px"; } var borderWidth = this.domNode.style.borderWidth; if (dojo.lang.isString(borderWidth) && borderWidth != "" && borderWidth != "0px" && borderWidth != "0px 0px 0px 0px") { this.topBorderNode.style.borderStyle = this.rightBorderNode.style.borderStyle = this.bottomBorderNode.style.borderStyle = this.leftBorderNode.style.borderStyle = this.domNode.style.borderStyle; this.topBorderNode.style.borderColor = this.rightBorderNode.style.borderColor = this.bottomBorderNode.style.borderColor = this.leftBorderNode.style.borderColor = this.domNode.style.borderColor; this.topBorderNode.style.borderWidth = this.bottomBorderNode.style.borderWidth = borderWidth; this.topBorderNode.style.borderBottomWidth = "0px"; this.bottomBorderNode.style.borderTopWidth = "0px"; this.rightBorderNode.style.borderRightWidth = this.domNode.style.borderRightWidth; this.leftBorderNode.style.borderLeftWidth = this.domNode.style.borderLeftWidth; this.domNode.style.borderWidth = "0px 0px 0px 0px"; } this._handleMove = new dojo.widget._SliderDragMoveSource(this.sliderHandleNode); this._handleMove.setParent(this); if (this.clickSelect) { dojo.event.connect(this.constrainingContainerNode, "onmousedown", this, "_onClick"); } if (this.isEnableX) { this.setValueX(!isNaN(this.initialValueX) ? this.initialValueX : (!isNaN(this.minimumX) ? this.minimumX : 0)); } if (!this.isEnableX || !this.showButtons) { this.rightButtonNode.style.width = "1px"; this.rightButtonNode.style.visibility = "hidden"; this.leftButtonNode.style.width = "1px"; this.leftButtonNode.style.visibility = "hidden"; } if (this.isEnableY) { this.setValueY(!isNaN(this.initialValueY) ? this.initialValueY : (!isNaN(this.minimumY) ? this.minimumY : 0)); } if (!this.isEnableY || !this.showButtons) { this.bottomButtonNode.style.width = "1px"; this.bottomButtonNode.style.visibility = "hidden"; this.topButtonNode.style.width = "1px"; this.topButtonNode.style.visibility = "hidden"; } if (this.focusNode.addEventListener) { this.focusNode.addEventListener("DOMMouseScroll", dojo.lang.hitch(this, "_mouseWheeled"), false); }}, _snapX:function (x) { if (x < 0) { x = 0; } else { if (x > this._constraintWidth) { x = this._constraintWidth; } else { var selectedValue = Math.round(x / this._valueSizeX); x = Math.round(selectedValue * this._valueSizeX); } } this.sliderHandleNode.style.left = x + "px"; if (this.flipX) { this._clipLeft = x + this._clipXdelta; } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -