二次封装dojo slider

本文介绍了一种音视频处理技术,通过二次封装timeslider并实现更多功能,包括HorizontalSlider和VerticalSlider,同时提供了代码示例。文章还讨论了样式、功能设置以及如何根据需求定制标签和图像。
摘要由CSDN通过智能技术生成
上次的二次封装timeslider,挺有意思,又来封装一个dojo的,样式还是用arcgis的。
实现更多功能,包括HorizontalSlider和VerticalSlider, 刻度的显示隐藏,标签的显示和隐藏,上刻度和下刻度的显示隐藏,
无序数显示刻度,标签图标的自由选择,大小选择。。。。更多功能大家看完code也可以自己慢慢加进去哈~~~

code有点长,先上slider的class::MyCustomSlider.js

/**
 * yilei
 * custom dojo slider
 * Note:>>!! sliderType got 2 type there are "HorizontalSlider" and "VerticalSlider", they use same setting.
 * The Top setting will became Left setting and the Buttom setting will became Right setting
 * when the sliderType set to "VerticalSlider"
 ---------------------------------------------------
 * For example:
 * The topLabels array is setting to display the top Graduation for "HorizontalSlider", it is setting to dispay the
 * left Graduation for "VerticalSlider" also.
 -----------------------------------------------------
 * This slider not suport image label for "VerticalSlider" now.....
 *custom obj example::
 *10	5	4	53	50	
 *
 *	{ [id: 1, label:10],
 *		[id:2, label: 5],
 *		[id:3, label: 4],.....
 *	}
 * need map.js suport
 */
 
dojo.declare("mapComponent.MyCustomSlider",null,{
	minimum:null,
	maximum:null,
	stepIncrement:1, //PANI
	customSliderArray: null, //[]
	divId:"",
	intermediateChanges:true,	
	showButtons:true,//only for VerticalSlider or CustomSliderV
	sliderClass:"",
	replaceFlag:"#",
	sliderName:"temp",
	sliderId:"tempId",
	SliderCssClass: "ies-Slider",
	labelImageCssClass:"sliderLabelImage",
	sliderType:"HorizontalSlider",
	/********HorizontalSlider and VerticalSlider and CustomSliderV and CustomSliderH**************/
	showCustomTopLabel: true,  //It is show custom label at left side on VerticalSlider
	showTopLabel:false,  //It is show label at left side on VerticalSlider
	showBottomMark:false, //It is show Graduation at right side on VerticalSlider
	showTopMark:false,  //It is show Graduation at left side on VerticalSlider
	showBottomLabel:true,	 //It is show label at right side on VerticalSlider
	noOfTopLabels:3,		//It is setting total labels number at left side on VerticalSlider
	topLabels:null,			//.....same to verticalslider
	noOfLabels:3, // Old noOfBottomlabels
	bottomlabels:null,	
	labelFooterFormat: "#",
	labelTopFormat: "#",	
	customTopLabelCssClass:"sliderCustomTopLabel",
	toplabelCssClass:"sliderTopLabel",
	topMarkCssClass:"sliderTopMark",
	bottomLabelCssClass:"sliderBottomLabel",
	bottomMarkCssClass:"sliderBottomMark",	
	showTopImageLabel:false,
	showBottomImageLabel:true,
	showSingleTopImageLabel:true,
	showSingleBottomImageLabel:true,
	showPlayPause:true,
	showPre:true,
	showNext:true,
	
	topImageLabels:["dropDownArrow_grey.png"],
	bottomImageLabels:["dropDownArrow_grey.png"],
	imageOnly:false,
	sliderLoop:false,
	thumbMovingRate:500,
	
	/********HorizontalSlider and VerticalSlider**************/
	
	onsliderChange:function(timeExtentObj){},
	defaultValue:0,
	increase:1,
	self:null,
	_totleStep:0,
	_customType:null,
	_sliderObj:null,
	_intervalObj:null,
	_playPauseButton:null,
	_nextButton:null,
	_preButton:null,
	_wrapString:"   <div class=\"esriTimeSlider\" id=\"sliderId\">\r\n   <table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\r\n   <tr>\r\n   <td align=\"right\" valign=\"middle\"><button id=\"sliderId_playpauseButtonNode\" type=\"button\">Play/Pause</button></td>\r\n   <td align=\"center\" valign=\"middle\" width=\"80%\" class=\"tsTmp\"></td>\r\n   <td align=\"left\" valign=\"middle\" width=\"30\"><button id=\"sliderId_preButtonNode\"  type=\"button\">Previous</button></td>\r\n   <td align=\"left\" valign=\"middle\"><button id=\"sliderId_nextButtonNode\"  type=\"button\">Next</button></td>\r\n   </tr>    \r\n   </table>\r\n   </div>",
	/**********constructor function for init*************/
	constructor:function(params){		
				
		dojo.mixin(this, params);		
		
				
		if((this.sliderType=="CustomSliderH" || this.sliderType=="CustomSliderV" )&&(this.customSliderArray && this.customSliderArray.length>0) )
		{
			if (this.showTopLabel == true)
				{this.topLabels=[];}
				
			if (this.showBottomLabel == true)
				{this.bottomlabels=[];}
				
			if (this.customSliderArray) {
				if (this.customSliderArray.length > 0) {
					this.minimum = 0;
					this.maximum = this.customSliderArray.length-1;
				}
			}
		
		// Setting Labels	
		console.log("this.maximum - " + this.maximum);
		console.log("this.minimum - " + this.minimum);
		
		
		
		var val = this.minimum;
			if (this.customSliderArray) {
				var obj=this.customSliderArray[this.minimum];
				val = obj.label;
			}
				
			if (this.showTopLabel == true)
				{this.topLabels.push(val);}
				
			if (this.showBottomLabel == true)
				{this.bottomlabels.push(val);}
		
		//var increment = parseInt(((this.maximum - this.minimum)+1) / (this.noOfLabels-2));
		//var increment = parseInt((this.maximum - this.minimum-1) / (this.noOfLabels-2));
		console.log((this.maximum - this.minimum) / (this.noOfLabels-1));
		var increment = Math.round((this.maximum - this.minimum) / (this.noOfLabels-1));
		console.log("increment - " + increment);
		var firstNum=this.minimum;
		var map=new Map();
		for(var f=0;f<this.noOfLabels-2;f++)
		{
			firstNum=firstNum+increment;
			map.put(firstNum,firstNum);
			
		}
		for(var t=1;t<this.customSliderArray.length-1;t++)
		{
			var temp=map.get(t);
			if(temp)
			{
				if (this.showTopLabel == true)
				this.topLabels.push(this.customSliderArray[temp].label);
				
				if (this.showBottomLabel == true)
				this.bottomlabels.push(this.customSliderArray[temp].label);
				map.remove(t);
			}
			else
			{
				if (this.showTopLabel == true)
				this.topLabels.push(null);
				
				if (this.showBottomLabel == true)
				this.bottomlabels.push(null);
			}
		}
		map=null;
		var val = this.maximum;
			if (this.customSliderArray) {
				var obj=this.customSliderArray[this.maximum];
				val = obj.label;
			}
				
			if (this.showTopLabel == true)
				this.topLabels.push(val);
				
			if (this.showBottomLabel == true)
				this.bottomlabels.push(val);
			
			if(this.sliderType=="CustomSliderH")
			{
				this._customType="H";
			}
			else if(this.sliderType=="CustomSliderV")
			{
				this._customType="V";
			}
		}
		if(this.defaultValue==0)this.defaultValue=this.minimum;	
		self=this;
		_totleStep=(this.maximum-this.minimum+1)/this.increase;		
		this.sliderId=getUniqueId(this.sliderName);	
		//alert(this.customSliderArray.length);
	},

	createSlider:function(){
		var self=this;
		if(this.sliderType=="HorizontalSlider" || this._customType=="H")
		{
			
			require(["dojo/parser", "dijit/form/HorizontalSlider", "dijit/form/HorizontalRule", "dijit/form/HorizontalRuleLabels","dojo/dom-class","dijit/form/Button","dojo/dom-attr"], 
                function(parser,HorizontalSlider,HorizontalRule,HorizontalRuleLabels,domClass,Button,domAttr){ 
                  parser.parse(); 
				  try
					{
						// Destroy the div and then create
						dojo.destroy(dojo.query("[id^="+self.sliderName+"]"));
						// Create new Div and add to divSlidersContainer
						//var sliderNode = dojo.byId(this.divId); 
						//alert(this.divId);
						//domClass.add(dojo.byId(_self.divId),"ttt");
						self._wrapString=self._wrapString.replace(/sliderId/g,self.sliderId);
						//console.dir(self._wrapString);
						dojo.place(self._wrapString,dojo.byId(self.divId));
						dojo.addClass(dojo.byId(self.sliderId),self.SliderCssClass)
						
						//domAttr.set(dojo.query(".esriTimeSlider")[0],"id",self.sliderId);
						//dojo.query(".tsTmp");
						new Button({
							//label: "Click me!",
							id:self.sliderId+"_playpauseButtonNodeID",
							iconClass:"tsButton tsPlayButton",
							showLabel:false,
							style:{"margin-top":"-20px","display":"none"},
							onClick: function(){
								// Do something:
								//self._playPauseButton.destory();
								console.dir(self);
								domAttr.set(this,"iconClass",self._intervalObj?"tsButton tsPlayButton":"tsButton tsPauseButton");
								self.playPause();
							}
						}, self.sliderId+"_playpauseButtonNode").startup();
						//self._playPauseButton = dijit.byId(self.sliderId+"_playpauseButtonNode");
						new Button({
							//label: "Click me!",
							id:self.sliderId+"_preButtonNodeID",
							iconClass:"tsButton tsPrevButton",
							showLabel:false,
							style:{"margin-top":"-20px","display":"none"},
							onClick: function(){
								// Do something:
								//alert("ggg");
								self.previous();
							}
							
						}, self.sliderId+"_preButtonNode").startup();
						//self._preButton = dijit.byId(self.sliderId+"_preButtonNode");
						new Button({
							//label: "Click me!",
							id:self.sliderId+"_nextButtonNodeID",
							iconClass:"tsButton tsNextButton",
							showLabel:false,
							style:{"margin-top":"-20px","display":"none"},
							onClick: function(){
								// Do something:
								//alert("hhhh");
								console.dir(self);
								self.next();
							}
						}, self.sliderId+"_nextButtonNode").startup();
						//self._nextButton=dijit.byId(self.sliderId+"_nextButtonNode");
						var sliderNode=dojo.create("div",null,dojo.query(".tsTmp",dojo.byId(self.sliderId))[0]);
						//sliderNode.id=self.sliderId;
						
						if(self.showTopLabel&&!self.showCustomTopLabel)
						{
						//alert("show Top");
							var rulesNodeLabelsTop = dojo.create("div", null, sliderNode); 				
							
							//_labelsPackage:function(noOfLabels,labelsArray,showImageLabel,showSingleImageLabel,imageLabelsArray,isTop)
							
							var newtopLabels=self._labelsPackage(self.noOfTopLabels,self.topLabels,self.showTopImageLabel,self.showSingleTopImageLabel,self.topImageLabels,self.labelTopFormat,true);
							var labelsHeight="1em";
							if(self.showTopImageLabel)
							labelsHeight="2em";		
							if((self.sliderType=="CustomSliderH" || self.sliderType=="CustomSliderV" )&&(self.customSliderArray && self.customSliderArray.length>0) )
									markCount=self.customSliderArray.length;
								else
									markCount=self.noOfTopLabels;						
							var sliderLabelsTop= new dijit.form.HorizontalRuleLabels(
								{
									container: "topDecoration",
									count: markCount,
									labels: newtopLabels,
									style: "height:"+labelsHeight+";font-size:75%;color:gray;white-space: nowrap;",
									//class:self.toplabelCssClass
								},
								rulesNodeLabelsTop);
								domClass.add(rulesNodeLabelsTop, self.toplabelCssClass);
								if(self.showTopMark)
								{
									var rulesNodeTop = dojo.create("div", null, sliderNode); 
									var sliderRuleTop= new dijit.form.HorizontalRule(
									{
									container: "topDecoration",
										count: markCount,
										style: "height:1em;font-size:75%;color:gray;",
										//class:self.topMarkCssClass
									},
									rulesNodeTop);
									domClass.add(rulesNodeTop, self.topMarkCssClass);
								}
								
						}
						
						if(self.showBottomLabel)
						{
							
							if(self.showBottomMark)
							{
								var markCount=0;
								//alert(self.sliderType);
								//alert(self.customSliderArray.length);
								if((self.sliderType=="CustomSliderH" || self.sliderType=="CustomSliderV" )&&(self.customSliderArray && self.customSliderArray.length>0) )
									markCount=self.customSliderArray.length;
								else
									markCount=self.noOfLabels;
								var rulesNodeBottom = dojo.create("div", null, sliderNode); 
								var sliderBottomRule= new dijit.form.HorizontalRule(
								{
								container: "bottomDecoration",
									count: markCount,
									style: "height:1em;font-size:75%;color:gray;",
									//class:self.bottomMarkCssClass
								},
								rulesNodeBottom);
								domClass.add(rulesNodeBottom, self.bottomMarkCssClass);
							}
							//	sliderNode.appendChild(rulesNode);
							
							var rulesNodeLabelsBottom = dojo.create("div", null, sliderNode); 
							//alert(self.bottomlabels.length);
							var newBottomLabels=self._labelsPackage(self.noOfLabels,self.bottomlabels,self.showBottomImageLabel,self.showSingleBottomImageLabel,self.bottomImageLabels,self.labelFooterFormat,false);
							//alert(self.bottomlabels.length);
							//console.dir(newBottomLabels);
							var sliderBottomLabels= new dijit.form.HorizontalRuleLabels(
								{
									container: "bottomDecoration",
									count: self.noOfLabels,
									labels: newBottomLabels,
									style: "height:2em;font-size:75%;color:gray;white-space: nowrap;",
									//class:self.sliderBottomLabel
								},
								rulesNodeLabelsBottom);
								domClass.add(rulesNodeLabelsBottom, self.bottomLabelCssClass);
								//console.dir(dojo.query(rulesNodeLabelsBottom)[0]);
						}	
						
						var slider = new dijit.form.HorizontalSlider({
									name: self.sliderId,
									value: self.defaultValue,
									minimum: self.minimum,
									maximum: self.maximum,
									discreteValues: _totleStep,
									intermediateChanges: self.intermediateChanges,
									//showButtons:self.showButtons,
									showButtons:false,
									//style: "position:relative",
									//style: "width:500px;",
									//class:self.SliderCssClass,
									onChange: function(value){
									//console.dir(value);
										if(self.sliderType=="CustomSliderH" || self.sliderType=="CustomSliderV" )
										{
											var customObj=self.customSliderArray[value];
											value=customObj;
											
										}
										if (self.showCustomTopLabel == true) {
											
											var topLabelDisplay="";
												if(self.sliderType=="CustomSliderH" || self.sliderType=="CustomSliderV" )
												{
													topLabelDisplay=self._formatLabels(value.label,self.labelTopFormat);
												}
												else
												{
													topLabelDisplay= self._formatLabels(value,self.labelTopFormat);
																									
												}
												dojo.byId(self.sliderId+"_sp_topLabel").innerHTML = topLabelDisplay;
										}
											self.onsliderChange(value);
									}

								}, sliderNode);
								slider.startup();
								//showPlayPause
								//showPre
								//showNext
								if(self.showPlayPause)
								self.showPlayPauseBtn();
								if(self.showPre)
								self.showPreBtn();
								if(self.showNext)
								self.showNextBtn();
								self._sliderObj=slider;
								var defaultBegain=0;
								if(self.sliderType=="CustomSliderH" || self.sliderType=="CustomSliderV" )
								{
									defaultBegain=self._formatLabels(self.customSliderArray[slider.value].label,self.labelTopFormat);
								}
								else
								{
									defaultBegain=self._formatLabels(slider.value,self.labelTopFormat);
								}
											
								if (self.showCustomTopLabel) {
									dojo.create("span", {id: self.sliderId+"_sp_topLabel",class:self.customTopLabelCssClass, innerHTML: defaultBegain}, dojo.query(".dijitSliderMoveable",dojo.byId(self.sliderId))[0]);
								}
					}catch(e){console.dir(e);}
				});
		}
		else if(this.sliderType=="VerticalSlider" || this._customType=="V")
		{
			require(["dojo/parser", "dijit/form/VerticalSlider", "dijit/form/VerticalRule", "dijit/form/VerticalRuleLabels","dojo/dom-class"], 
                function(parser,VerticalSlider,VerticalRule,VerticalRuleLabels,domClass){ 
                  parser.parse(); 
				  try
					{
						// Destroy the div and then create
						dojo.destroy(dojo.query("[id^="+self.sliderName+"]"));
						// Create new Div and add to divSlidersContainer
						//var sliderNode = dojo.byId(this.divId); 
						//alert(this.divId);
						domClass.add(dojo.byId(self.divId),"ttt");
						var sliderNode=dojo.create("div",null,dojo.byId(self.divId));
						//sliderNode.id=self.sliderId;
						
						if(self.showTopLabel&&!self.showCustomTopLabel)
						{
						//alert("show Top");
							var rulesNodeLabelsTop = dojo.create("div", null, sliderNode); 				
							
							//_labelsPackage:function(noOfLabels,labelsArray,showImageLabel,showSingleImageLabel,imageLabelsArray,isTop)
							//var newtopLabels=self._labelsPackage(self.noOfTopLabels,self.topLabels,self.showTopImageLabel,self.showSingleTopImageLabel,self.topImageLabels,self.labelTopFormat,true);
							//**********************function not suport image now
							var newtopLabels=self._labelsPackage(self.noOfTopLabels,self.topLabels,false,self.showSingleTopImageLabel,self.topImageLabels,self.labelTopFormat,true);
							var labelsHeight="1em";
							if(self.showTopImageLabel)
							labelsHeight="2em";				
							var sliderLabelsTop= new dijit.form.VerticalRuleLabels(
								{
									container: "leftDecoration",
									count: self.noOfTopLabels,
									labels: newtopLabels,
									style: "width:"+labelsHeight+";font-size:75%;color:gray;",
									//class:self.toplabelCssClass
								},
								rulesNodeLabelsTop);
								domClass.add(rulesNodeLabelsTop, self.toplabelCssClass);
								if(self.showTopMark)
								{
									var rulesNodeTop = dojo.create("div", null, sliderNode); 
									var sliderRuleTop= new dijit.form.VerticalRule(
									{
									container: "leftDecoration",
										count: self.noOfTopLabels,
										style: "width:1em;font-size:75%;color:gray;",
										//class:self.topMarkCssClass
									},
									rulesNodeTop);
									domClass.add(rulesNodeTop, self.topMarkCssClass);
								}
								
						}
						
						if(self.showBottomLabel)
						{
							
							if(self.showBottomMark)
							{
								var rulesNodeBottom = dojo.create("div", null, sliderNode); 
								var sliderBottomRule= new dijit.form.VerticalRule(
								{
								container: "rightDecoration",
									count: self.noOfLabels,
									style: "width:1em;font-size:75%;color:gray;",
									//class:self.bottomMarkCssClass
								},
								rulesNodeBottom);
								domClass.add(rulesNodeBottom, self.bottomMarkCssClass);
							}
							//	sliderNode.appendChild(rulesNode);
							
							var rulesNodeLabelsBottom = dojo.create("div", null, sliderNode); 
							//var newBottomLabels=self._labelsPackage(self.noOfBottomlabels,self.bottomlabels,self.showBottomImageLabel,self.showSingleBottomImageLabel,self.bottomImageLabels,self.labelFooterFormat,false);
							//*****************function not suport image now.....
							var newBottomLabels=self._labelsPackage(self.noOfLabels,self.bottomlabels,false,self.showSingleBottomImageLabel,self.bottomImageLabels,self.labelFooterFormat,false);
							//console.dir();
							console.dir(newBottomLabels);
							var sliderBottomLabels= new dijit.form.VerticalRuleLabels(
								{
									container: "rightDecoration",
									count: self.noOfLabels,
									labels: newBottomLabels,
									style: "width:2em;font-size:75%;color:gray;",
									//class:self.sliderBottomLabel
								},
								rulesNodeLabelsBottom);
								domClass.add(rulesNodeLabelsBottom, self.bottomLabelCssClass);
								//console.dir(dojo.query(rulesNodeLabelsBottom)[0]);
						}	
						
						var slider = new dijit.form.VerticalSlider({
									name: self.sliderId,
									value: self.defaultValue,
									minimum: self.minimum,
									maximum: self.maximum,
									discreteValues: _totleStep,
									intermediateChanges: self.intermediateChanges,
									//showButtons:self.showButtons,
									showButtons:false,
									//style: "position:relative",
									style: "height:500px;",
									//class:self.SliderCssClass,
									onChange: function(value){
									//console.dir(value);
									if (self.showCustomTopLabel == true) {
										var topLabelDisplay="";
											if(self.sliderType=="CustomSliderH" || self.sliderType=="CustomSliderV" )
											{
												var customObj=self.customSliderArray[value];
												value=customObj;
												topLabelDisplay=self._formatLabels(value.id,self.labelTopFormat);
											}
											else
											{
												topLabelDisplay= self._formatLabels(value,self.labelTopFormat);
																								
											}
											dojo.byId(self.sliderId+"_sp_topLabel").innerHTML = topLabelDisplay;
										}
										self.onsliderChange(value);
									}

								}, sliderNode);
								slider.startup();
								self._sliderObj=slider;
								var defaultBegain=0;
								if(self.sliderType=="CustomSliderH" || self.sliderType=="CustomSliderV" )
								{
									defaultBegain=self._formatLabels(self.customSliderArray[slider.value].label,self.labelTopFormat);
								}
								else
								{
									defaultBegain=self._formatLabels(slider.value,self.labelTopFormat);
								}
								if (self.showCustomTopLabel) {
									dojo.create("span", {id: self.sliderId+"_sp_topLabel",class:self.customTopLabelCssClass, innerHTML: defaultBegain}, dojo.query(".dijitSliderMoveable",dojo.byId(self.sliderId))[0]);
								}
					}catch(e){console.dir(e);}
				});
		}
		return self._sliderObj;
	},
	setSliderValue:function(v){
		this._sliderObj.setValue(v);
	},
	getValue:function(){
		return this._sliderObj.value;
	},
	playPause:function() {
	console.dir(this);
	var seft=this;
		if (this._intervalObj) {
			clearInterval(this._intervalObj);
			this._intervalObj = null;
		} else {
			this._intervalObj=setInterval(function(){
			//console.dir();
				seft.next();
			},this.thumbMovingRate);
		}
	},
	stop:function(){
		clearInterval(this._intervalObj);
	},
	next:function(){
	//console.dir(self._sliderObj);
		var currentValue=this._sliderObj.value;
		var increaseValue=currentValue+1;
		if(increaseValue>this.maximum)
		{
			if(this.sliderLoop)
			this.setSliderValue(this.minimum);
			else
			clearInterval(this._intervalObj);
		}
		else
		{
			this.setSliderValue(increaseValue);
		}
	},
	previous:function(){
		var currentValue=this._sliderObj.value;
		var preValue=currentValue-1;
		if(preValue>=this.minimum)
		{
			this.setSliderValue(preValue);
		}
		
	},
	_labelsPackage:function(noOfLabels,labelsArray,showImageLabel,showSingleImageLabel,imageLabelsArray,format,isTop){
		//var newLabelsArray=[];
		
		try
		{
			var labelImageCssClass=this.labelImageCssClass;
			var newArray=[];
			if (labelsArray==null) {		
				var balLabels = noOfLabels-1;
				
				if(showImageLabel)
				{
					if(showSingleImageLabel)
					{
						var firstValue=this._formatLabels(this.minimum,format);
						firstValue=this.imageOnly?"":firstValue;
						if(isTop)
						firstValue=firstValue+"<div><img class='"+labelImageCssClass+" "+labelImageCssClass+"0' src='"+imageLabelsArray[0]+"'/></div>";
						else
						firstValue="<div><img class='"+labelImageCssClass+" "+labelImageCssClass+"0'  src='"+imageLabelsArray[0]+"'/></div>"+firstValue;
						newArray.push(firstValue);
						var increment = (this.maximum-this.minimum)/balLabels;
						var firstNum = this.minimum;
						var indexImagcss=0;
						for (var i=1; i<noOfLabels-1; i++) {
							indexImagcss=i+1;
							firstNum = firstNum + increment;
							var arryValue=this._formatLabels(firstNum,format);
							arryValue=this.imageOnly?"":arryValue;
							if(isTop)
							arryValue=arryValue+"<div><img class='"+labelImageCssClass+" "+labelImageCssClass+i+"'  src='"+imageLabelsArray[0]+"'/></div>";
							else
							arryValue="<div><img class='"+labelImageCssClass+" "+labelImageCssClass+i+"' src='"+imageLabelsArray[0]+"'/></div>"+arryValue;
							//labelsArray
							newArray.push(arryValue);
						}
						var lastValue=this._formatLabels(this.maximum,format);
						lastValue=this.imageOnly?"":lastValue;
						if(isTop)
						lastValue=lastValue+"<div><img class='"+labelImageCssClass+" "+labelImageCssClass+indexImagcss+"'  src='"+imageLabelsArray[0]+"'/></div>";
						else
						lastValue="<div><img class='"+labelImageCssClass+" "+labelImageCssClass+indexImagcss+"'  src='"+imageLabelsArray[0]+"'/></div>"+lastValue;
						//labelsArray
						newArray.push(lastValue);
					}
					else
					{
						var firstValue=this._formatLabels(this.minimum,format);
						firstValue=this.imageOnly?"":firstValue;
						if(isTop)
						firstValue=firstValue+"<div><img class='"+labelImageCssClass+" "+labelImageCssClass+"0'  src='"+imageLabelsArray[0]+"'/></div>";
						else
						firstValue="<div><img class='"+labelImageCssClass+" "+labelImageCssClass+"0' src='"+imageLabelsArray[0]+"'/></div>"+firstValue;
						//labelsArray
						newArray.push(firstValue);
						var increment = (this.maximum-this.minimum)/balLabels;
						var firstNum = this.minimum;
						var indexImagcss=0;
						for (var i=1; i<noOfLabels-1; i++) {
							indexImagcss=i+1;
							firstNum = firstNum + increment;
							var arryValue=this._formatLabels(firstNum,format);
							arryValue=this.imageOnly?"":arryValue;
							if(isTop)
							arryValue=arryValue+"<div><img class='"+labelImageCssClass+" "+labelImageCssClass+i+"' src='"+imageLabelsArray[i]+"'/></div>";
							else
							arryValue="<div><img class='"+labelImageCssClass+" "+labelImageCssClass+i+"' src='"+imageLabelsArray[i]+"'/></div>"+arryValue;
							//labelsArray
							newArray.push(arryValue);
						}
						var lastValue=this._formatLabels(this.maximum,format);
						lastValue=this.imageOnly?"":lastValue;
						if(isTop)
						lastValue=lastValue+"<div><img class='"+labelImageCssClass+" "+labelImageCssClass+indexImagcss+"'   src='"+imageLabelsArray[imageLabelsArray.length-1]+"'/></div>";
						else
						lastValue="<div><img class='"+labelImageCssClass+" "+labelImageCssClass+indexImagcss+"' src='"+imageLabelsArray[imageLabelsArray.length-1]+"'/></div>"+lastValue;
						//lastValue=lastValue+"<div><img src='"+imageLabelsArray[imageLabelsArray.length-1]+"'/></div>"
						//labelsArray
						newArray.push(lastValue);
					}
				}
				else
				{
	
					var firstValue=this._formatLabels(this.minimum,format);				
					//labelsArray
					newArray.push(firstValue);
				
					var increment = (this.maximum-this.minimum)/balLabels;
					var firstNum = this.minimum;			
					for (var i=1; i<noOfLabels-1; i++) {					
						firstNum = firstNum + increment;
						
						var arryValue=this._formatLabels(firstNum,format);					
						//labelsArray
						newArray.push(arryValue);
					}
					var lastValue=this._formatLabels(this.maximum,format);				
					//labelsArray
					newArray.push(lastValue);
				}
			
			}
			else
			{
				//alert(labelsArray);
				if(showImageLabel)
				{
					if(showSingleImageLabel)
					{
						for(var i=0;i<labelsArray.length;i++)
						{
							if(labelsArray[i]!=null)
							{
								var labelValue=this._formatLabels(labelsArray[i],format);
								labelValue=this.imageOnly?"":labelValue;
								if(isTop)
								labelValue=labelValue+"<div><img class='"+labelImageCssClass+" "+labelImageCssClass+"0' src='"+imageLabelsArray[0]+"'/></div>";
								else
								labelValue="<div><img class='"+labelImageCssClass+" "+labelImageCssClass+"0'  src='"+imageLabelsArray[0]+"'/></div>"+labelValue;
								newArray.push(labelValue);
							}
							else
							{
								newArray.push(" ");
							}
							
						}
					}
					else
					{
						for(var i=0;i<labelsArray.length;i++)
						{
							if(labelsArray[i]!=null)
							{
								var labelValue=this._formatLabels(labelsArray[i],format);
								labelValue=this.imageOnly?"":labelValue;
								if(isTop)
								labelValue=labelValue+"<div><img class='"+labelImageCssClass+" "+labelImageCssClass+"0' src='"+imageLabelsArray[i]+"'/></div>";
								else
								labelValue="<div><img class='"+labelImageCssClass+" "+labelImageCssClass+"0'  src='"+imageLabelsArray[i]+"'/></div>"+labelValue;
								newArray.push(labelValue);
							}
							else
							{
								newArray.push(" ");
							}
						}
						
					}
				}
				else
				{
					for(var i=0;i<labelsArray.length;i++)
					{
						if(labelsArray[i]!=null)
						{
							var labelValue=this._formatLabels(labelsArray[i],format);
							newArray.push(labelValue);
						}	
						else
						{
							newArray.push(" ");
						}
						
					}
				}
				//console.dir(newArray);
				//labelsArray=newArray;
				//console.dir(newArray);
			}
		}
		catch(e){console.dir(e);}
		
		return newArray;
	},
	_formatLabels:function(label,format){
			return format.replace(this.replaceFlag,label);
	},
	_getself:function(){
		return self;
	},
	showPlayPauseBtn:function(){
		dojo.query("[widgetid="+this.sliderId+"_playpauseButtonNodeID]").style("display","block");
	},
	hidePlayPauseBtn:function(){
		dojo.query("[widgetid="+this.sliderId+"_playpauseButtonNodeID]").style("display","none");
	},
	showPreBtn:function(){
		//self.sliderId+"_preButtonNodeID"
		dojo.query("[widgetid="+this.sliderId+"_preButtonNodeID]").style("display","block");
	},
	hidePreBtn:function(){
		dojo.query("[widgetid="+this.sliderId+"_preButtonNodeID]").style("display","none");
	},
	showNextBtn:function(){
		//sliderId+"_nextButtonNodeID"
		dojo.query("[widgetid="+this.sliderId+"_nextButtonNodeID]").style("display","block");
	},
	hideNextBtn:function(){
		dojo.query("[widgetid="+this.sliderId+"_nextButtonNodeID]").style("display","none");
	},
	destroy:function(){
	//console.dir(this._nextButton);
	//self.sliderId+"_nextButtonNode"
		if(this._sliderObj)
			this._sliderObj.destroy();
		if(dojo.byId(this.sliderId+"_nextButtonNode"))
			dojo.destroy(this.sliderId+"_nextButtonNode");
		if(dojo.byId(this.sliderId+"_playpauseButtonNode"))
			dojo.destroy(this.sliderId+"_playpauseButtonNode");
		if(dojo.byId(this.sliderId+"_preButtonNode"))
			dojo.destroy(this.sliderId+"_preButtonNode");
		dojo.destroy(this.sliderId);
	}
});


其中的dropDownArrow_grey.png是自定义的标签显示图片,可以在设置时更换成别的。
下面奉上test.html的code::

<html>
<head>
<title>test slider</title>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dijit/themes/claro/claro.css">

<link rel="stylesheet" href="http://js.arcgis.com/3.13/esri/css/esri.css">
<script>dojoConfig = {parseOnLoad: true}</script>
			<script src="http://dojotoolkit.org/reference-guide/1.10/_static/js/dojo/dojo.js"></script>
			<script src="MyCustomSlider.js"></script>
			<script src="Map.js"></script>
<style>
#testSlider .sliderCustomTopLabel{
	position: absolute;
			top: -22px;
			
			color: red;
			font: 11px Arial bold;
			 white-space: nowrap;
}
#testSlider2 .sliderCustomTopLabel{
	position: absolute;
			top: -22px;
			
			color: red;
			font: 11px Arial bold;
			 white-space: nowrap;
}
#testSlider .ies-Slider{
position:relative;
	width:500px;
	top:50px;
}

#testSlider2 .ies-Slider{
position:relative;
	width:500px;
	top:100px;
}

#testSlider .sliderButtomLabel{
color:red;
}
#testSlider .sliderLabelImage
{
	width:30px;
	height:30px;
}
</style>

</head>
<body class="claro">
<input type="button" value="test" οnclick="newslider()"/>
<input type="button" value="test destroy" οnclick="destroy()"/>
<input type="button" value="showplaypause" οnclick="showplaypause()"/>
<div id="testSlider"></div>
<div id="testSlider2"></div>
</body>
<script>

//require(["dojo/parser", "dijit/form/HorizontalSlider", "dijit/form/HorizontalRule", "dijit/form/HorizontalRuleLabels"]);
function getUniqueId (prefix) {
		var uniqueId = (new Date()).getTime();
		return (prefix || 'id') + (uniqueId++);
	}
var slider=new mapComponent.MyCustomSlider({
	labelFooterFormat:"# eWeek",
	noOfLabels:5,
	minimum: 1,
	maximum: 10,
	divId:"testSlider",
	sliderLoop: false,
	showCustomTopLabel:false,
	//imageOnly:false,
	showBottomMark:true,
	showTopMark:true,
	showTopLabel:true,
	bottomImageLabels:["http://eventmedia.eurecom.fr/dashboard/img/explore.png"],
	sliderType:"CustomSliderH",//VerticalSlider//CustomSliderH//HorizontalSlider//CustomSliderV
	customSliderArray:[{id:1,label:10},{id:2,label:5},{id:3,label:4},{id:4,label:50},{id:5,label:60},{id:6,label:70},{id:6,label:71},{id:9,label:81}],
	onsliderChange:function(value){
	console.dir(value);
	console.dir("yilei testaa=="+value.id + "  " + value.label);
	}
});
obj=slider.createSlider();

function destroy()
{
	slider.destroy();
}
function showplaypause()
{
	slider2.showPlayPauseBtn();
}
var slider2;
function newslider()
{
	slider2=new mapComponent.MyCustomSlider({
	labelFooterFormat:"# eWeek",
	noOfLabels:3,
	divId:"testSlider2",
	minimum: 1,
	maximum: 10,
	sliderName:"new",
	sliderLoop: false,
	//showCustomTopLabel:false,
	//imageOnly:false,
		showPlayPause:false,
	showPre:true,
	showNext:true,
	
	sliderType:"CustomSliderH",//VerticalSlider//CustomSliderH//HorizontalSlider//CustomSliderV
	customSliderArray:[{id:1,label:"10 for test"},{id:2,label:5},{id:3,label:4},{id:4,label:50},{id:5,label:60},{id:6,label:70},{id:6,label:71},{id:9,label:"81 for testing"}],
	onsliderChange:function(value){
	console.dir("yilei bb test=="+value.id + "  " + value.label);
	}
});
slider2.createSlider();
console.dir(slider.getself());
console.dir(slider2.getself());
}

</script>
</html>


值得注意的一些细节是,当sliderType设置成CustomSliderH或CustomSliderV时,意思是生成无序数的slider,必须设置customSliderArray,它是用来生产无序数slider的一个集合,此时mininum和maxinum是不用设置的。
当sliderType设置成VerticalSlider或HorizontalSlider时,mininum和maxinum是必须设置的
当showBottomImageLabel或showSingleTopImageLabel设置成true时,topImageLabels或bottomImageLabels就必须设置值,如果showSingleTopImageLabel或showSingleBottomImageLabel设置为true,topImageLabels或bottomImageLabels只需要设置一张图片就可以,
如果为false,则需要根据你设置的标签数来设置图片数。

其中有用到Map.js,下面给出Map.js的code::

function Map(linkItems) { 
    this.current = undefined; 
    this._size = 0; 
    if(linkItems === false){
    	this.disableLinking(); 
    } 
}
/**
 * get the map
 * @return current object
 */
Map.noop = function() { 
    return this; 
}; 
/**
 * illegal
 * @return
 */
Map.illegal = function() { 
    throw new Error("illegal use"); 
}; 
/**
 * 
 * @param obj
 * @param foreignKeys
 * @return
 */
Map.from = function(obj, foreignKeys) { 
    var map = new Map; 
    for(var prop in obj) { 
        if(foreignKeys || obj.hasOwnProperty(prop)){
        	map.put(prop, obj[prop]); 
        } 
    } 
    return map; 
}; 
/**
 * stop usemap
 * @return
 */
Map.prototype.disableLinking = function() { 
    this.link = Map.noop; 
    this.unlink = Map.noop; 
    this.disableLinking = Map.noop; 
    this.next = Map.illegal; 
    this.key = Map.illegal; 
    this.value = Map.illegal; 
    this.clear = Map.illegal; 
    return this; 
}; 
/**
 * return hash vallue expl:number 123
 * @param value key/value
 * @return
 */
Map.prototype.hash = function(value) { 
    return (typeof value) + ' ' + (value instanceof Object ? (value.__hash || (value.__hash = ++arguments.callee.current)) : value.toString()); 
}; 
/**
 * return map size
 * @return
 */
Map.prototype.size = function() { 
    return this._size;
}; 

Map.prototype.hash.current = 0; 
/**
 * get Value from key
 * @param key
 * @return
 */
Map.prototype.get = function(key) { 
    var item = this[this.hash(key)]; 
    return item === undefined ? undefined : item.value; 
}; 
/**
 *put the value to map
 * @param key
 * @param value
 * @return
 */
Map.prototype.put = function(key, value) { 
    var hash = this.hash(key); 
    if(this[hash] === undefined) { 
        var item = { key : key, value : value }; 
        this[hash] = item; 
        this.link(item); 
        ++this._size; 
    }else{
    	this[hash].value = value;
    } 
    return this; 
}; 
/**
 * remove value from key
 * @param key
 * @return
 */
Map.prototype.remove = function(key) { 
    var hash = this.hash(key); 
    var item = this[hash]; 
    if(item !== undefined) { 
        --this._size; 
        this.unlink(item); 
        delete this[hash]; 
    } 
    return this; 
}; 
/**
 * clear  ap
 * @return
 */
Map.prototype.clear = function() { 
    while(this._size){
		this.remove(this.key()); 
	} 
    return this; 
}; 
/**
 * proc map
 * @param item
 * @return
 */
Map.prototype.link = function(item) { 
    if(this._size == 0) { 
        item.prev = item; 
        item.next = item; 
        this.current = item; 
    }else { 
        item.prev = this.current.prev; 
        item.prev.next = item; 
        item.next = this.current; 
        this.current.prev = item;
    } 
}; 
Map.prototype.unlink = function(item) { 
    if(this._size == 0){ 
        this.current = undefined;
    }else { 
        item.prev.next = item.next; 
        item.next.prev = item.prev; 
        if(item === this.current){
        	this.current = item.next; 
        } 
    } 
}; 
/**
 * get next one
 * @return
 */
Map.prototype.next = function() { 
    this.current = this.current.next; 
    return this;
}; 
/**
 * get the key
 * @return
 */
Map.prototype.key = function() { 
    return this.current.key; 
}; 
/**
 *get the value
 * @return
 */
Map.prototype.value = function() { 
    return this.current.value; 
};


把四个文件准备好,就可以进行测试了:


labelFooterFormat:"# eWeek",
noOfLabels:5,
divId:"testSlider",
sliderLoop: false,
showCustomTopLabel:false,
//imageOnly:false,
showBottomMark:true,
showTopMark:true,
showTopLabel:true,
bottomImageLabels:["http://eventmedia.eurecom.fr/dashboard/img/explore.png"],
sliderType:"CustomSliderH",//VerticalSlider//CustomSliderH//HorizontalSlider//CustomSliderV
customSliderArray:[{id:1,label:10},{id:2,label:5},{id:3,label:4},{id:4,label:50},{id:5,label:60},{id:6,label:70},{id:6,label:71},{id:9,label:81}],
onsliderChange:function(value){
console.dir(value);
console.dir("yilei testaa=="+value.id + "  " + value.label);
}


labelFooterFormat:"# eWeek",
noOfLabels:5,
minimum: 1,
maximum: 10,
divId:"testSlider",
sliderLoop: false,
showCustomTopLabel:false,
//imageOnly:false,
showBottomMark:true,
showTopMark:true,
showTopLabel:true,
bottomImageLabels:["http://eventmedia.eurecom.fr/dashboard/img/explore.png"],
sliderType:"HorizontalSlider",//VerticalSlider//CustomSliderH//HorizontalSlider//CustomSliderV
onsliderChange:function(value){
console.dir(value);
console.dir("yilei testaa=="+value.id + "  " + value.label);
}


slider2=new mapComponent.MyCustomSlider({
labelFooterFormat:"# eWeek",
noOfLabels:3,
divId:"testSlider2",

sliderName:"new",
sliderLoop: false,
//showCustomTopLabel:false,
//imageOnly:false,
showPlayPause:false,
showPre:true,
showNext:true,

sliderType:"CustomSliderH",//VerticalSlider//CustomSliderH//HorizontalSlider//CustomSliderV
customSliderArray:[{id:1,label:"10 for test"},{id:2,label:5},{id:3,label:4},{id:4,label:50},{id:5,label:60},{id:6,label:70},{id:6,label:71},{id:9,label:"81 for testing"}],
onsliderChange:function(value){
console.dir("yilei bb test=="+value.id + "  " + value.label);
}


不贴图了,慢慢试吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值