123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455 |
- /**
- * EasyUI for jQuery 1.5.5.6
- *
- * Copyright (c) 2009-2018 www.jeasyui.com. All rights reserved.
- *
- * Licensed under the freeware license: http://www.jeasyui.com/license_freeware.php
- * To use it on other terms please contact us: info@jeasyui.com
- *
- */
- /**
- * slider - EasyUI for jQuery
- *
- * Dependencies:
- * draggable
- *
- */
- (function($){
- function init(target){
- var slider = $('<div class="slider">' +
- '<div class="slider-inner">' +
- '<a href="javascript:;" class="slider-handle"></a>' +
- '<span class="slider-tip"></span>' +
- '</div>' +
- '<div class="slider-rule"></div>' +
- '<div class="slider-rulelabel"></div>' +
- '<div style="clear:both"></div>' +
- '<input type="hidden" class="slider-value">' +
- '</div>').insertAfter(target);
- var t = $(target);
- t.addClass('slider-f').hide();
- var name = t.attr('name');
- if (name){
- slider.find('input.slider-value').attr('name', name);
- t.removeAttr('name').attr('sliderName', name);
- }
- slider.bind('_resize', function(e,force){
- if ($(this).hasClass('easyui-fluid') || force){
- setSize(target);
- }
- return false;
- });
- return slider;
- }
-
- /**
- * set the slider size, for vertical slider, the height property is required
- */
- function setSize(target, param){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
-
- if (param){
- if (param.width) opts.width = param.width;
- if (param.height) opts.height = param.height;
- }
- slider._size(opts);
- if (opts.mode == 'h'){
- slider.css('height', '');
- slider.children('div').css('height', '');
- } else {
- slider.css('width', '');
- slider.children('div').css('width', '');
- slider.children('div.slider-rule,div.slider-rulelabel,div.slider-inner')._outerHeight(slider._outerHeight());
- }
- initValue(target);
- }
-
- /**
- * show slider rule if needed
- */
- function showRule(target){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
-
- var aa = opts.mode == 'h' ? opts.rule : opts.rule.slice(0).reverse();
- if (opts.reversed){
- aa = aa.slice(0).reverse();
- }
- _build(aa);
-
- function _build(aa){
- var rule = slider.find('div.slider-rule');
- var label = slider.find('div.slider-rulelabel');
- rule.empty();
- label.empty();
- for(var i=0; i<aa.length; i++){
- var distance = i*100/(aa.length-1)+'%';
- var span = $('<span></span>').appendTo(rule);
- span.css((opts.mode=='h'?'left':'top'), distance);
-
- // show the labels
- if (aa[i] != '|'){
- span = $('<span></span>').appendTo(label);
- span.html(aa[i]);
- if (opts.mode == 'h'){
- span.css({
- left: distance,
- marginLeft: -Math.round(span.outerWidth()/2)
- });
- } else {
- span.css({
- top: distance,
- marginTop: -Math.round(span.outerHeight()/2)
- });
- }
- }
- }
- }
- }
-
- /**
- * build the slider and set some properties
- */
- function buildSlider(target){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
-
- slider.removeClass('slider-h slider-v slider-disabled');
- slider.addClass(opts.mode == 'h' ? 'slider-h' : 'slider-v');
- slider.addClass(opts.disabled ? 'slider-disabled' : '');
-
- var inner = slider.find('.slider-inner');
- inner.html(
- '<a href="javascript:;" class="slider-handle"></a>' +
- '<span class="slider-tip"></span>'
- );
- if (opts.range){
- inner.append(
- '<a href="javascript:;" class="slider-handle"></a>' +
- '<span class="slider-tip"></span>'
- );
- }
-
- slider.find('a.slider-handle').draggable({
- axis:opts.mode,
- cursor:'pointer',
- disabled: opts.disabled,
- onDrag:function(e){
- var left = e.data.left;
- var width = slider.width();
- if (opts.mode!='h'){
- left = e.data.top;
- width = slider.height();
- }
- if (left < 0 || left > width) {
- return false;
- } else {
- setPos(left, this);
- return false;
- }
- },
- onStartDrag:function(){
- state.isDragging = true;
- opts.onSlideStart.call(target, opts.value);
- },
- onStopDrag:function(e){
- setPos(opts.mode=='h'?e.data.left:e.data.top, this);
- opts.onSlideEnd.call(target, opts.value);
- opts.onComplete.call(target, opts.value);
- state.isDragging = false;
- }
- });
- slider.find('div.slider-inner').unbind('.slider').bind('mousedown.slider', function(e){
- if (state.isDragging || opts.disabled){return}
- var pos = $(this).offset();
- setPos(opts.mode=='h'?(e.pageX-pos.left):(e.pageY-pos.top));
- opts.onComplete.call(target, opts.value);
- });
- function fixVal(value){
- var dd = String(opts.step).split('.');
- var dlen = dd.length>1 ? dd[1].length : 0;
- return parseFloat(value.toFixed(dlen));
- }
-
- function setPos(pos, handle){
- var value = pos2value(target, pos);
- var s = Math.abs(value % opts.step);
- if (s < opts.step/2){
- value -= s;
- } else {
- value = value - s + opts.step;
- }
- value = fixVal(value);
- if (opts.range){
- var v1 = opts.value[0];
- var v2 = opts.value[1];
- var m = parseFloat((v1+v2)/2);
- if (handle){
- var isLeft = $(handle).nextAll('.slider-handle').length > 0;
- if (value <= v2 && isLeft){
- v1 = value;
- } else if (value >= v1 && (!isLeft)){
- v2 = value;
- }
- } else {
- if (value < v1){
- v1 = value;
- } else if (value > v2){
- v2 = value;
- } else {
- value < m ? v1 = value : v2 = value;
- }
- }
- $(target).slider('setValues', [v1,v2]);
- } else {
- $(target).slider('setValue', value);
- }
- }
- }
-
- /**
- * set a specified value to slider
- */
- function setValues(target, values){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
- var oldValues = $.isArray(opts.value) ? opts.value : [opts.value];
- var newValues = [];
-
- if (!$.isArray(values)){
- values = $.map(String(values).split(opts.separator), function(v){
- return parseFloat(v);
- });
- }
-
- slider.find('.slider-value').remove();
- var name = $(target).attr('sliderName') || '';
- for(var i=0; i<values.length; i++){
- var value = values[i];
- if (value < opts.min) value = opts.min;
- if (value > opts.max) value = opts.max;
-
- var input = $('<input type="hidden" class="slider-value">').appendTo(slider);
- input.attr('name', name);
- input.val(value);
- newValues.push(value);
-
- var handle = slider.find('.slider-handle:eq('+i+')');
- var tip = handle.next();
- var pos = value2pos(target, value);
- if (opts.showTip){
- tip.show();
- tip.html(opts.tipFormatter.call(target, value));
- } else {
- tip.hide();
- }
-
- if (opts.mode == 'h'){
- var style = 'left:'+pos+'px;';
- handle.attr('style', style);
- tip.attr('style', style + 'margin-left:' + (-Math.round(tip.outerWidth()/2)) + 'px');
- } else {
- var style = 'top:' + pos + 'px;';
- handle.attr('style', style);
- tip.attr('style', style + 'margin-left:' + (-Math.round(tip.outerWidth())) + 'px');
- }
- }
- opts.value = opts.range ? newValues : newValues[0];
- $(target).val(opts.range ? newValues.join(opts.separator) : newValues[0]);
-
- if (oldValues.join(',') != newValues.join(',')){
- opts.onChange.call(target, opts.value, (opts.range?oldValues:oldValues[0]));
- }
- }
-
- function initValue(target){
- var opts = $.data(target, 'slider').options;
- var fn = opts.onChange;
- opts.onChange = function(){};
- setValues(target, opts.value);
- opts.onChange = fn;
- }
-
- /**
- * translate value to slider position
- */
- function value2pos(target, value){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
- var size = opts.mode == 'h' ? slider.width() : slider.height();
- var pos = opts.converter.toPosition.call(target, value, size);
- if (opts.mode == 'v'){
- pos = slider.height() - pos;
- }
- if (opts.reversed){
- pos = size - pos;
- }
- return pos;
- // return pos.toFixed(0);
- }
-
- /**
- * translate slider position to value
- */
- function pos2value(target, pos){
- var state = $.data(target, 'slider');
- var opts = state.options;
- var slider = state.slider;
- var size = opts.mode == 'h' ? slider.width() : slider.height();
- var pos = opts.mode=='h' ? (opts.reversed?(size-pos):pos) : (opts.reversed?pos:(size-pos));
- var value = opts.converter.toValue.call(target, pos, size);
- return value;
- // return value.toFixed(0);
- }
-
- $.fn.slider = function(options, param){
- if (typeof options == 'string'){
- return $.fn.slider.methods[options](this, param);
- }
-
- options = options || {};
- return this.each(function(){
- var state = $.data(this, 'slider');
- if (state){
- $.extend(state.options, options);
- } else {
- state = $.data(this, 'slider', {
- options: $.extend({}, $.fn.slider.defaults, $.fn.slider.parseOptions(this), options),
- slider: init(this)
- });
- // $(this).removeAttr('disabled');
- $(this)._propAttr('disabled', false);
- }
-
- var opts = state.options;
- opts.min = parseFloat(opts.min);
- opts.max = parseFloat(opts.max);
- if (opts.range){
- if (!$.isArray(opts.value)){
- opts.value = $.map(String(opts.value).split(opts.separator), function(v){
- return parseFloat(v);
- });
- }
- if (opts.value.length < 2){
- opts.value.push(opts.max);
- }
- } else {
- opts.value = parseFloat(opts.value);
- }
- opts.step = parseFloat(opts.step);
- opts.originalValue = opts.value;
-
- buildSlider(this);
- showRule(this);
- setSize(this);
- });
- };
-
- $.fn.slider.methods = {
- options: function(jq){
- return $.data(jq[0], 'slider').options;
- },
- destroy: function(jq){
- return jq.each(function(){
- $.data(this, 'slider').slider.remove();
- $(this).remove();
- });
- },
- resize: function(jq, param){
- return jq.each(function(){
- setSize(this, param);
- });
- },
- getValue: function(jq){
- return jq.slider('options').value;
- },
- getValues: function(jq){
- return jq.slider('options').value;
- },
- setValue: function(jq, value){
- return jq.each(function(){
- setValues(this, [value]);
- });
- },
- setValues: function(jq, values){
- return jq.each(function(){
- setValues(this, values);
- });
- },
- clear: function(jq){
- return jq.each(function(){
- var opts = $(this).slider('options');
- setValues(this, opts.range?[opts.min,opts.max]:[opts.min]);
- });
- },
- reset: function(jq){
- return jq.each(function(){
- var opts = $(this).slider('options');
- $(this).slider(opts.range?'setValues':'setValue', opts.originalValue);
- });
- },
- enable: function(jq){
- return jq.each(function(){
- $.data(this, 'slider').options.disabled = false;
- buildSlider(this);
- });
- },
- disable: function(jq){
- return jq.each(function(){
- $.data(this, 'slider').options.disabled = true;
- buildSlider(this);
- });
- }
- };
-
- $.fn.slider.parseOptions = function(target){
- var t = $(target);
- return $.extend({}, $.parser.parseOptions(target, [
- 'width','height','mode',{reversed:'boolean',showTip:'boolean',range:'boolean',min:'number',max:'number',step:'number'}
- ]), {
- value: (t.val() || undefined),
- disabled: (t.attr('disabled') ? true : undefined),
- rule: (t.attr('rule') ? eval(t.attr('rule')) : undefined)
- });
- };
-
- $.fn.slider.defaults = {
- width: 'auto',
- height: 'auto',
- mode: 'h', // 'h'(horizontal) or 'v'(vertical)
- reversed: false,
- showTip: false,
- disabled: false,
- range: false,
- value: 0,
- separator: ',',
- min: 0,
- max: 100,
- step: 1,
- rule: [], // [0,'|',100]
- tipFormatter: function(value){return value},
- converter:{
- toPosition:function(value, size){
- var opts = $(this).slider('options');
- var p = (value-opts.min)/(opts.max-opts.min)*size;
- return p;
- },
- toValue:function(pos, size){
- var opts = $(this).slider('options');
- var v = opts.min + (opts.max-opts.min)*(pos/size);
- return v;
- }
- },
- onChange: function(value, oldValue){},
- onSlideStart: function(value){},
- onSlideEnd: function(value){},
- onComplete: function(value){}
- };
- })(jQuery);
|