📄 jsslider.js
字号:
document["onmousemove"] = peer._oldOnmousemove;
document["onmouseup"] = peer._oldOnmouseup;
}
var dragElementID = peer._dragElement.id;
peer._dragElement = undefined;
peer._dragX = undefined;
peer._dragY = undefined;
peer._dragLeft = undefined;
peer._dragTop = undefined;
if (!document.all)
{
JSSlider.prototype.currentInstance = false;
}
peer._dragInProgress = false;
if (event.cancelable)
{
// or else the browser thinks you are dragging links or images around
event.stopPropagation();
event.preventDefault();
}
peer._correctMarkerOrdering(dragElementID);
}
JSSlider.prototype._correctMarkerOrdering = function(dragElementID)
{
if (this._rangeSlider)
{
var startMarkerID = this._id + JSSlider._ID_START_MARKER;
var endMarkerID = this._id + JSSlider._ID_END_MARKER;
var startMarker = document.getElementById(startMarkerID);
var endMarker = document.getElementById(endMarkerID);
var markersReversed = false;
if (this._horizontalLayout)
{
var startLeft = parseInt(startMarker.style.left);
var endLeft = parseInt(endMarker.style.left);
if (endLeft < startLeft)
{
markersReversed = true;
}
}
else
{
var startTop = parseInt(startMarker.style.top);
var endTop = parseInt(endMarker.style.top);
if (endTop > startTop) // remember that zero is at the bottom
{
markersReversed = true;
}
}
if (markersReversed)
{
// correct the tab order of the markers in case they are reversed
this.setMarkerPercent(this._startPercent, this._endPercent, false);
// put the correct marker in focus
if (dragElementID == startMarkerID)
{
endMarker.focus();
}
else
{
startMarker.focus();
}
}
}
}
JSSlider.prototype._recalculatePercentages = function()
{
var min, max, length, newStartPercent0To100, newEndPercent0To100;
if (this._horizontalLayout)
{
min = this._widgetMargin + this._trackImageDimension;
max = this._widgetWidth - min;
length = max - min;
newStartPercent0To100 = ( parseInt(document.getElementById(this._id +
JSSlider._ID_START_MARKER).style.left) - min +
Math.floor(0.5*this._horizontalMarkerWidth) ) * 100.0 / length;
if (this._rangeSlider)
{
newEndPercent0To100 = ( parseInt(document.getElementById(this._id +
JSSlider._ID_END_MARKER).style.left) - min +
Math.floor(0.5*this._horizontalMarkerWidth) ) * 100.0 / length;
}
}
else
{
min = this._widgetMargin + this._trackImageDimension;
max = this._widgetHeight - min;
length = max - min;
newStartPercent0To100 = 100.0 - 100.0 * ( parseInt(
document.getElementById(this._id +
JSSlider._ID_START_MARKER).style.top) - min +
Math.floor(0.5*this._verticalMarkerHeight) ) / length;
if (this._rangeSlider)
{
newEndPercent0To100 = 100.0 - 100.0 * ( parseInt(
document.getElementById(this._id +
JSSlider._ID_END_MARKER).style.top) - min +
Math.floor(0.5*this._verticalMarkerHeight) ) / length;
}
}
// respect that the start and end markers might cross over in updating the range track
if (this._rangeSlider)
{
if (newStartPercent0To100 > newEndPercent0To100)
{
var swapTemp = newStartPercent0To100;
newStartPercent0To100 = newEndPercent0To100;
newEndPercent0To100 = swapTemp;
}
}
this._startPercent = newStartPercent0To100;
this._endPercent = newEndPercent0To100;
this._repositionRangeBar();
}
JSSlider.prototype._repositionRangeBar = function()
{
if (this._rangeSlider)
{
var rangeBar = document.getElementById(
this._id + JSSlider._ID_RANGE_BAR);
var startAndSize = this._getRangeBarStartAndSize();
if (this._horizontalLayout)
{
rangeBar.style.left = startAndSize["start"] + "px";
rangeBar.style.width = startAndSize["size"] + "px";
}
else
{
rangeBar.style.top = startAndSize["start"] + "px";
rangeBar.style.height = startAndSize["size"] + "px";
}
}
}
JSSlider.prototype._broadcastPositionChange = function()
{
if (this._changeListener)
{
try
{
eval(this._changeListener + "(" + this._startPercent + "," + this._endPercent + ")", 1);
}
catch (problem)
{
//TODO log problems
}
}
}
JSSlider.prototype._initializeWidgetDimensions = function(widgetLength)
{
var widgetThickness = 2*this._widgetMargin + this._trackImageDimension;
if ( (this._numTicks > 0) || (this._customImage != null) )
{
widgetThickness += this._ticksThickness + this._ticksMargin;
}
if (this._horizontalLayout)
{
this._widgetWidth = widgetLength;
this._widgetHeight = widgetThickness;
}
else // vertical layout
{
this._widgetWidth = widgetThickness;
this._widgetHeight = widgetLength;
}
}
JSSlider.prototype._getMinimumMarkerHorizontalLeft = function()
{
var minimumLeft = this._widgetMargin + this._trackImageDimension -
Math.floor(0.5*this._horizontalMarkerWidth);
return minimumLeft;
}
JSSlider.prototype._getMaximumMarkerHorizontalLeft = function()
{
var maximumLeft = this._widgetWidth - this._widgetMargin -
this._trackImageDimension - Math.floor(0.5*this._horizontalMarkerWidth);
return maximumLeft;
}
JSSlider.prototype._getMinimumMarkerVerticalTop = function()
{
var minimumTop = this._widgetMargin + this._trackImageDimension -
Math.floor(0.5*this._verticalMarkerHeight);
return minimumTop;
}
JSSlider.prototype._getMaximumMarkerVerticalTop = function()
{
var maximumTop = this._widgetHeight - this._widgetMargin -
this._trackImageDimension - Math.floor(0.5*this._verticalMarkerHeight);
return maximumTop;
}
/**
* Only call this method if in a horizontal layout.
*/
JSSlider.prototype._ensureMarkerLeftInRange = function(desiredLeft)
{
var minimumLeft = this._getMinimumMarkerHorizontalLeft();
if (desiredLeft < minimumLeft)
{
return minimumLeft;
}
var maximumLeft = this._getMaximumMarkerHorizontalLeft();
if (desiredLeft > maximumLeft)
{
return maximumLeft;
}
return desiredLeft;
}
/**
* Only call this method if in a vertical layout.
*/
JSSlider.prototype._ensureMarkerTopInRange = function(desiredTop)
{
var minimumTop = this._getMinimumMarkerVerticalTop();
if (desiredTop < minimumTop)
{
return minimumTop;
}
var maximumTop = this._getMaximumMarkerVerticalTop();
if (desiredTop > maximumTop)
{
return maximumTop;
}
return desiredTop;
}
JSSlider.prototype._getMarkerLeft = function(percent0To100)
{
if (this._horizontalLayout) // variable
{
var min = this._widgetMargin + this._trackImageDimension;
var max = this._widgetWidth - min;
var length = max - min;
var position = min + length*percent0To100/100.0 -
Math.floor(0.5*this._horizontalMarkerWidth);
return position;
}
else // constant
{
var effectiveTickThickness = 0;
if ( (this._numTicks > 0) || (this._customImage != null) )
{
effectiveTickThickness = this._ticksThickness + this._ticksMargin;
}
var trackInset; // the track is the center line along the track
if (this._ticksBeforeTrack)
{
trackInset = this._widgetMargin + effectiveTickThickness +
0.5*this._trackImageDimension;
}
else
{
trackInset = this._widgetMargin + 0.5*this._trackImageDimension;
}
return trackInset - Math.floor(0.5*this._verticalMarkerWidth);
}
}
JSSlider.prototype._getMarkerTop = function(percent0To100)
{
if (this._horizontalLayout) // constant
{
var effectiveTickThickness = 0;
if ( (this._numTicks > 0) || (this._customImage != null) )
{
effectiveTickThickness = this._ticksThickness + this._ticksMargin;
}
var trackInset; // the track is the center line along the track
if (this._ticksBeforeTrack)
{
trackInset = this._widgetMargin + effectiveTickThickness +
0.5*this._trackImageDimension;
}
else
{
trackInset = this._widgetMargin + 0.5*this._trackImageDimension;
}
return trackInset - Math.floor(0.5*this._horizontalMarkerHeight);
}
else // variable
{
var min = this._widgetMargin + this._trackImageDimension;
var max = this._widgetHeight - min;
var length = max - min;
var position = min + length*(100.0-percent0To100)/100.0 -
Math.floor(0.5*this._verticalMarkerHeight);
return position;
}
}
JSSlider.prototype._getRangeBarStartAndSize = function()
{
var start, size;
if (this._horizontalLayout)
{
var width = this._widgetWidth - 2*this._widgetMargin;
var min = this._trackImageDimension;
var max = width - this._trackImageDimension;
var length = max - min;
start = min + length*this._startPercent/100.0;
var other = min + length*this._endPercent/100.0;
size = other - start;
}
else
{
var height = this._widgetHeight - 2*this._widgetMargin;
var min = this._trackImageDimension;
var max = height - this._trackImageDimension;
var length = max - min;
var other = min + length - length*this._startPercent/100.0;
start = min + length - length*this._endPercent/100.0;
size = other - start;
}
return {"start":start, "size":size};
}
JSSlider.prototype._appendTickMarks = function(sb)
{
var numberOfTicks = this._numTicks;
if (numberOfTicks > 0 || (this._customImage != null) )
{
var ticksLength, outerTop, outerLeft, outerWidth, outerHeight,
tickWidth, tickHeight;
if (this._horizontalLayout)
{
if (this._ticksBeforeTrack)
{
outerTop = this._widgetMargin;
}
else
{
outerTop = this._widgetMargin + this._trackImageDimension + this._ticksMargin;
}
outerLeft = this._widgetMargin + this._trackImageDimension;
ticksLength = this._widgetWidth - 2*this._widgetMargin -
2*this._trackImageDimension;
outerWidth = ticksLength;
outerHeight = this._ticksThickness;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -