博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JQuery Slider 实现时间刻度滑动条,用以编辑项目/起始时间(手动输入可自动更新到滑动条)...
阅读量:7115 次
发布时间:2019-06-28

本文共 6979 字,大约阅读时间需要 23 分钟。

hot3.png

    最近公司项目应客户要求,web端需要跟桌面端一样实现通过滑动条设置计划起始时间,所以就研究了一下Slider插件,被搞惨了。下面简单描述一下需求。

    需求场景:首先,要使用滑动条进行方式进行计划起始时间的编辑(这不难,可以很容易使用slider实现),另外还需要提供一个弹出层对起始时间进行编辑,编辑完提交后自动更新滑动条上的起始时间滑块(这点有点费劲),效果图如下(实现在下面咯~~~):

    

图1、滑动条

图2、右键菜单

图3、弹出层编辑

    实现思路:滑动条实现起来不是很难,在initSlider的时候,向服务器发送请求得到所有资计划的json对象,遍历子计划,并添加slider元素到页面即可,上干活~~~~。

    所有的slider都在下面的.layout里面,至于那两个时间input是父计划的起始时间(子计划时间与父计划的关系,我就不说了~~)

    

//初始化slider$(document).ready(function(){	initSlider();});

添加slider(在initSlider函数中)

var planid = $("#planid").val();			var pre;		var next;		var curSlider;		var url = '/plans/getSubPlanJson/' + planid;		$.ajax({		    type: "POST",		    dataType: "json",		    url: url,		    cache: false,		    data:  "",		    success: function (json) {		        if (typeof(json) != "undefined" && typeof(json["rows"]) != "undefined") {		        	for (var i = 0; i < json["rows"].length; i++) {		        	  		        		var ids = json["rows"][i]["IDS"];		        		$("
", {"class": "layout-slider"}).css("width", "100%") .append($("
").css({display: "none"}).append($("", {type: "text", name: "mindate",value:json["rows"][i]["STARTDATE"], id: "mindate" + i})))//开始时间表单,滑动滑动条时,动态改变 .append($("").css({display: "none"}).append($("", {type: "text", name: "maxdate",value:json["rows"][i]["ENDDATE"], id: "maxdate" + i}))) .append($("", {"class": "layoutspan"}) .append($("", {text: ids}).css("width", "100px").attr("Index",i)) .append($("").css({display: "inline-block", width: "900px", padding: "0 5px"}).append($("", {id: "Slider" + i, type: "slider", name: "area"})))) .appendTo(".layout") .append($("").css({display: "none"}).append($("", {id: "plandata" + i, type: "text", name: "plandataId",value:json["rows"][i]["ID"]}))); var maxDate=$("#maxdate"+i); var minDate=$("#mindate"+i); var v1 = getvalue(mindate, scale, to, json["rows"][i]["STARTDATE"]); var v2 = getvalue(maxdate, scale, to, json["rows"][i]["ENDDATE"]); $("#Slider" + i).attr("value", v1 + ";" + v2); $("#Slider" + i).slider({ from: 0, to: to, step: step, limits: false, smooth: true, range:true, round: 0, dimension: "", skin: "plastic" , calculate: function(value){ pre = (value+"").split(";")[0]; next = (value+"").split(";")[1]; //获取当前进度条id,用以更新表单 var t =$(this)[0].inputNode[0].id; curSlider=t.substring(6,7) return calculate.call(this, value); }, onstatechange: function(value){ //当滑动条改变时,将起始时间更新到相应的计划的表单 var mind = (value+"").split(";")[0]; var maxd = (value+"").split(";")[1]; var mind = calculate.call(this, mind); var maxd = calculate.call(this, maxd); $("#mindate"+curSlider).attr("value",mind); $("#maxdate"+curSlider).attr("value",maxd); window.console && console.log('curSlider: %s', curSlider); } });

 右键菜单编辑的实现:

$('span.layoutspan').contextMenu('myMenu1', {		                	bindings: {		        	        	'edit': function(t) {		        	        		var span=$(t).children(":first");		        	        		var idS=$(span).text();		        	        		var index =$(span).attr("Index");		        	        		$("#editPlandata").dialog({		        	        			title : "编辑计划",		        	        			modal : true,		        	        			href : "/plans/editPlanData/" + idS+"?mindate="+min+"&maxdate="+max,		        	        			top : $("#center").offset().top + 50,		        	        			iconCls : "icon-save",		        	        			width : 500,		        	        			buttons : [ {		        	        				text : '提交',		        	        				id : 'submit1',		        	        				handler : function() {		        	        					$(t).empty();		    		        	        		$(t).attr("class","layout");		    		        	        		$(t).append($("", {text: idS}).css("width", "100px").attr("Index",index));		    		        	        		$(t).append($("").css({display: "inline-block", width: "900px", padding: "0 5px"})		    		        	        			.append($("", {id: "Slider" + index, type: "slider", name: "area"})));		        	        					var startdata = $("#editPlandata input[name='startdate']").val();		        	        					var enddata = $("#editPlandata input[name='enddate']").val();		        	        					var v1 = getvalue(mindate, scale, to, startdata);		        	    		        		var v2 = getvalue(maxdate, scale, to,enddata);		        	    		        		$("#Slider" + index).attr("value",v1 + ";" + v2);		        	    		        		$("#Slider" + index).slider({ 		        	    					      	from: 0, 		        	    					      	to: to, 		        	    					      	step: step, 		        	    					      	limits: false,		        	    					      	smooth: true, 		        	    					      	range:true,		        	    					      	round: 0, 		        	    					      	dimension: "", 		        	    					      	skin: "plastic" ,  		        	    					    	calculate: function(value){ 		        	    					      		pre = (value+"").split(";")[0]; 		        	    					      	    next = (value+"").split(";")[1];		        	    					      	   //获取当前进度条id,用以更新表单		        	    					      	    var t =$(this)[0].inputNode[0].id;		        	    					      	    curSlider=t.substring(6,7)		        	    					      		return calculate.call(this, value);  		        	    					      	},		        	    					      			        	    		        			onstatechange: function(value){ 		        	    		        				//当滑动条改变时,将起始时间更新到相应的计划的表单		        	    		        				var mind = (value+"").split(";")[0]; 		        	    					      		var maxd = (value+"").split(";")[1];		        	    					      		var mind = calculate.call(this, mind);		        	    					      		var maxd = calculate.call(this, maxd);		        	    					      		$("#mindate"+curSlider).attr("value",mind);		        	    					      		$("#maxdate"+curSlider).attr("value",maxd);		        	    					      		window.console && console.log('curSlider: %s', curSlider);		        	    					      	}		        	    		        		});		        	    		        		$("#editPlandata").dialog("close");		        	    		        		var start = $("#editPlandata input[name=startdate]").val();		        	    		        		var end = $("#editPlandata input[name=enddate]").val();		        	    		        		var min="#mindate"+index;		        	    		        		$("#mindate"+index).attr("value",start);		        	    		        		$("#maxdate"+index).attr("value",end);		        	        				}		        	        			}, {		        	        				text : '取消',		        	        				iconCls : 'icon-cancel',		        	        				handler : function() {		        	        					$("#editPlandata").dialog("close");		        	        							        	        				}		        	        			} ],		        	        			close : function(event, ui) {		        	        				$(this).dialog("close");		        	        				$(this).dialog("destroy");		        	        			}		        	        		});		        	        				        	        	}

基本上这样就可以了,上面的代码直接可能无法直接使用,而且代码重复性比较高,后面会抽象封装一下,我把整个的js代码附件一下(第一次写博客,貌似不能上传附件,有需要的可以找我要哈~~~~)。

    刚开始写博客,有什么不足之处,望各位给出意见,互相学习!

 

    

转载于:https://my.oschina.net/u/780876/blog/504439

你可能感兴趣的文章
export, import 和 export default的区别
查看>>
云场景实践研究第5期:朗新科技
查看>>
临近春节你为什么打不到车?概率论来帮忙!
查看>>
MySQL数据库基础操作
查看>>
C++模板别名的理解
查看>>
Elasticsearch在Hdfs上build的实现及优化
查看>>
1.02-字母数字生成器
查看>>
【git搭建】创建本地仓库与github(远程仓库)的传输
查看>>
js中的事件委托或是事件代理详解
查看>>
java设计模式-----原型模式
查看>>
10.13 netfilter5表5链介绍
查看>>
Linux 动态清空文件后 程序再向这个文件写内容时 文件大小不变 并文件开头多了很多^@符号...
查看>>
SaaS服务商如何通过数加平台统计业务流量
查看>>
多线程(项目性能优化实战)
查看>>
GitBook 之旅
查看>>
mysql企业备份软件mysqlbackup启动连接失败
查看>>
Hybris UI的Route(路由)实现
查看>>
spring事务管理源码解析合集
查看>>
CAS算法
查看>>
企业级 SpringBoot 教程 (九)springboot整合Redis
查看>>