Gridster-Wd.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679
  1. var dimensions = 20;
  2. var margins = 5;
  3. /*
  4. 依赖jquery.js,jquery.gridster.min.js,
  5. */
  6. function GridsterWd(gridster, json) {
  7. var sybjCtrl = this;
  8. this.gridster = gridster;
  9. var THIS=this;
  10. // try{
  11. // gridster.$el.css({zIndex:parseInt(wd.topWindow.wd.base.applyIframeElement.parentNode.style.zIndex)+1});
  12. // }catch(e){
  13. // console.log(e);
  14. // }
  15. gridster.add_widget2=function(id,lb,initurl, size_x, size_y, col, row, max_size, min_size){
  16. //console.log(arguments);
  17. var html="<li id=\""+id+"\" bjlb=\""+lb+"\" initurl=\""+initurl+"\" >"
  18. +"<div title=\"双击重置大小\" class=\"grsymask\" style=\"width:100%;height:100%;opacity:0.5;position:absolute;z-index:1;"+(THIS.isEditing?"":"display:none;")+"\"></div>"
  19. +"<div class='close' onclick=\"closediv(this.parentElement)\"></div>"
  20. +"<div class=\"ContainerForLoad\" style=\"height:100%;"+(THIS.isEditing?"":"")+"\"></div></li>;"
  21. return gridster.add_widget.call(gridster,html,size_x, size_y, col, row, max_size, min_size);
  22. }
  23. //
  24. this.jsondata = json||"[]";
  25. this.isGf = (EditType == '2') ? 1 : 0;
  26. this.ajaxUrl = (this.isGf == 0) ? "/desktop?" : "/desktopDef?"; // ajax服务地址 // "geXingHua.do?" : " geXingHuaGf.do?"。Lin
  27. // 如
  28. // geXingHua.do?
  29. this.edit_en = null; // 是否开启编辑状态
  30. this.containerForLoad = "ContainerForLoad"; // 类名常量 li标签内定位加载整个部件的div
  31. this.imgheader = "img-header"; // 类名常量 li标签内定位绑定刷新事件的div
  32. this.flushIconStyle = "background:url(/nndx/image/icon-party.png) no-repeat;height:31px;width:38px;margin-left:3px;margin-top:2px"; // 刷新按钮的样式
  33. this.setAjaxUrl = function(ajaxUrl) {
  34. this.ajaxUrl = ajaxUrl;
  35. };
  36. this.funcStr = [ "initGridster", "myserialize", "saveedit", "userEdit",
  37. "ajax_userEdit", "ajax_getBuJianCode", "yesedit", "noedit",
  38. "closediv", "getParams", "rollBackChangeAndExit", "flushBj", "",
  39. "", "", "" ];
  40. this.initGridster = function() {
  41. // 处理返回的数据 data("code":"div...", "列":"列值", "行":"行值", "高":"高值",
  42. // "宽":"宽值");
  43. // 处理:1.首先转化成json对象,对json对象数组进行遍历
  44. var divarray = new Array();
  45. this.gridster.remove_all_widgets();
  46. this.isEditing = false;
  47. // console.info("还原使用json : " + json==null?'有':'无');
  48. var objs = JSON.parse(this.jsondata);
  49. var usewidth=Math.max($(wd.topWindow).outerWidth(true),1025)/(dimensions+margins+margins);
  50. var cols=[0];
  51. var rows=[0];
  52. var group=[];
  53. var sgroup=[{col:1,row:1}];
  54. var egroup=[];
  55. var avgroup=sgroup;
  56. var THIS=this;
  57. function inIectangle(g,ggg){
  58. var A=[];
  59. A[0]=new Array(g.col,g.row);
  60. A[1]=new Array(g.col+g.size_x,g.row+g.size_y);
  61. for(var i=0;i<ggg.length;i++){
  62. var B=[];
  63. B[0]=new Array(ggg[i].col,ggg[i].row);
  64. B[1]=new Array(ggg[i].col+ggg[i].size_x,ggg[i].row+ggg[i].size_y);
  65. if(THIS.areaInArea(A,B)){
  66. return true;
  67. }
  68. }
  69. return false;
  70. }
  71. $(objs).each(function(i,el){
  72. // 加载布局里各个模块的位置和大小
  73. //宽,高不小于100
  74. this.size_x=calWidthAndHeight(Math.max( el.size_x,100));
  75. this.size_y=calWidthAndHeight(Math.max( el.size_y,100));
  76. this.col=calLeftAndTop(el.col);
  77. this.row= calLeftAndTop(el.row);
  78. }).sort(function(a,b){
  79. // if(a.col<b.col){
  80. //
  81. // if(a.row<=b.row){
  82. // return -1;
  83. // }else{
  84. // return 1;
  85. // }
  86. // }else if(a.col==b.col){
  87. // if(a.row<b.row){
  88. // return -1;
  89. // }else{
  90. // return 1;
  91. // }
  92. //
  93. // }else if(a.col>b.col){
  94. // if(a.row>=b.row){
  95. // return 1;
  96. // }else{
  97. // return -1;
  98. // }
  99. // }
  100. if(a.row>=b.row){
  101. if(a.col>b.col+b.size_x){
  102. if(b.row<=a.row){
  103. return 1;
  104. }else{
  105. return -1;
  106. }
  107. }else{
  108. if(b.row<a.row){
  109. return 1;
  110. }else{
  111. return -1;
  112. }
  113. }
  114. }else{
  115. return -1
  116. }
  117. return 0;
  118. }).each(function(i,el){
  119. if(true)return;//20220914智能重排排版不稳定,先去掉
  120. //智能重排
  121. var find=false;
  122. var findgroup;
  123. for(var j=0;j<avgroup.length;j++){
  124. el.col=avgroup[j].col;
  125. el.row=avgroup[j].row;
  126. if(!avgroup[j].use&&(el.col+el.size_x)<=usewidth&&!inIectangle(el,group)){
  127. findgroup=avgroup[j];
  128. find=true;
  129. break;
  130. }
  131. }
  132. if(find){
  133. findgroup.use=1;
  134. }else{
  135. el.col=1;
  136. var maxrow=0;
  137. for(var j=0;j<avgroup.length;j++){
  138. maxrow=Math.max(maxrow,avgroup[j].row);
  139. }
  140. el.row=maxrow;
  141. }
  142. //推测位置
  143. sgroup.push({col:el.col+el.size_x, row:el.row});
  144. egroup.push({col:1, row:el.row+el.size_y});
  145. egroup.push({col:el.col, row:el.row+el.size_y});
  146. avgroup=sgroup.concat(egroup);
  147. group.push(el);
  148. // console.log(el);
  149. }).each(function(i, el) {
  150. // console.log(i+" gridster "+el)
  151. //console.log(calWidthAndHeight(el.size_x)+" "+ calWidthAndHeight(el.size_y)+" "+ calLeftAndTop(el.col)+" "+ calLeftAndTop(el.row))
  152. var sss=sybjCtrl.gridster.add_widget2(el.id, el.bjlb, el.initurl,
  153. (el.size_x),(el.size_y), (el.col), (el.row)).addClass("plugin-div");
  154. // sybjCtrl.gridster.add_widget("<div class='close' onclick='closediv(this.parentElement)'></div><div class='ContainerForLoad' style='height:100%;'></div>",el.size_x, el.size_y, el.col, el.row).attr({id:el.id,bjlb:el.bjlb,initurl:el.initurl});
  155. });
  156. gridster.$el.on("dblclick",".grsymask",function(){
  157. var widget=$(this).parents("[initurl]")
  158. // console.log(widget);
  159. var data=SYBJCTRL.getParams("serviceType=20&sybjsyId="+widget.attr("id"));
  160. //console.log(data)
  161. gridster.resize_widget(widget,calWidthAndHeight(data.size_x),calWidthAndHeight(data.size_y))
  162. return false;
  163. })
  164. // try{
  165. // var children=gridster.$el.children()
  166. // var maxwidth=0;
  167. //
  168. // for(var i=0;i<children.length;i++){
  169. // var x=parseInt($(children[i]).css("left"));
  170. //
  171. // var xx=parseInt($(children[i]).css("width"));
  172. //
  173. // maxwidth=Math.max(maxwidth,x+xx);
  174. // }
  175. //
  176. // wd.topWindow.wd.base.setHomeWidth(maxwidth);
  177. // }catch(e){
  178. // console.log(e);
  179. // }
  180. };
  181. this.myserialize = function() {
  182. //从$("ul li")改为$("ul li.gs-w")
  183. var length = $("ul li.gs-w").length;
  184. // console.info('li的length: ' + length);
  185. var array_json = new Array();
  186. $("ul li.gs-w").each(function(i, el) {
  187. // data-row="3" data-col="2" data-sizex="300" data-sizey="100"
  188. // col,row,size_x,size_y
  189. // console.info('li的col:' + $(this).attr("data-col") + "li的row:" +
  190. // $(this).attr("data-row"));
  191. var d = new Object();
  192. // d.col = $(this).attr("data-col");
  193. // d.row = $(this).attr("data-row");
  194. // d.size_x = $(this).attr("data-sizex");
  195. // d.size_y = $(this).attr("data-sizey");
  196. d.col = parseInt($(this).css("left"));
  197. d.row =parseInt($(this).css("top"));
  198. d.size_x =parseInt($(this).css("width"));
  199. d.size_y = parseInt($(this).css("height"));
  200. d.id = $(this).attr("id");
  201. array_json.push(d);
  202. });
  203. // //console.info('array_json的值: '+array_json);
  204. // //console.info('array_json转json的值: '+JSON.stringify(array_json));
  205. return JSON.stringify(array_json);
  206. };
  207. this.saveedit = function(SESSION_STATE) {
  208. var saveStr = this.myserialize();
  209. var result = this.ajax_getBuJianCode({serviceType:4,json: saveStr});
  210. if (SESSION_STATE == "SESSION_STATE_APP_NETWORK" && this.isGf == 0) { // 判断是否为前台页面,后台页面不关闭编辑菜单
  211. this.noedit();
  212. sybjCtrl.changeRootTitle();
  213. } else {
  214. alert('保存成功'); // ('保存')。Lin
  215. }
  216. };
  217. // 初始化编辑
  218. this.userEdit = function(gfOrgr) {
  219. // console.info("调用initEdit");
  220. if (gfOrgr == 'gf') {
  221. this.ajax_userEdit("/desktopDef?serviceType=0&edit=1"); // ("geXingHuaGf.do?serviceType=0&edit=1")。Lin
  222. } else {
  223. this.ajax_userEdit("/desktop?serviceType=0&edit=1"); // ("geXingHua.do?serviceType=0&edit=1")。Lin
  224. }
  225. ;
  226. };
  227. //重置首页
  228. this.reset = function(){
  229. $.ajax({
  230. type : "POST",
  231. url : "/desktop?serviceType=6&edit=1", // "geXingHua.do?serviceType=6&edit=1"。Lin
  232. data : {},
  233. dataType : "json",
  234. async : false,
  235. success : function(data) {
  236. window.location.reload();
  237. }
  238. });
  239. }
  240. // ajax方法 处理用户编辑请求
  241. this.ajax_userEdit = function(ajaxurl) {
  242. $.ajax({
  243. type : "POST",
  244. url : ajaxurl,
  245. data : {},
  246. dataType : "json",
  247. async : false,
  248. success : function(data) {
  249. // case 1:说明第一次使用,需刷新页面 case 0:不处理
  250. if (data != null && data['needFlush'] == 1) {
  251. // 刷新,显示编辑菜单
  252. window.location.reload();
  253. } else {
  254. yesedit();
  255. }
  256. }
  257. });
  258. };
  259. // ajax方法 处理Gridster部件请求
  260. // ajax方法 获取新增部件html代码
  261. this.ajax_getBuJianCode = function(arg, func) {
  262. var d;
  263. $.ajax({
  264. type : "POST",
  265. url : this.ajaxUrl,
  266. data :arg,
  267. dataType : "json",
  268. async : false,
  269. success : function(data) {
  270. if (data != null && data['needFlush'] == 1) {
  271. window.location.reload();
  272. if (data['isForwardGf'] != '1') { // 若不是转向官方模板编辑,则不手动改变当前路径为"个人首页"
  273. sybjCtrl.changeRootTitle();
  274. }
  275. } else {
  276. d = data;
  277. }
  278. }
  279. });
  280. return d;
  281. }
  282. this.yesedit = function() { // 开启编辑模式
  283. this.isEditing = true;
  284. if($("#GxhGFDqSyMbid").val()==""){
  285. $("#mbselect").val("");
  286. $("#grsymb_del_btn").hide();
  287. }
  288. $("#slder,#pg_cj").css('display', 'block');
  289. $("#pg_cj").css('top', '30px');
  290. this.gridster.enable(); // 可拖动
  291. this.gridster.enable_resize(); // 可改变大小
  292. edit_en = true;
  293. // 显示关闭按钮
  294. $(".close").css("display","");
  295. //遮罩层
  296. $("#slder,.grsymask").slideDown("slow");
  297. // $("."+this.containerForLoad).hide()
  298. // 拉伸到底部修复
  299. // setTimeout(function(){
  300. // var marginleft=THIS.gridster.$el.css("margin-left");
  301. // THIS.gridster.$el.css({"left":marginleft,"margin":0});
  302. // },1000)
  303. // this.gridster.$el.css({"left":marginleft});//禁用自动居中显示
  304. // setTimeout(function(){
  305. // $(wd.base.applyIframeElement.parentElement).css("left")
  306. //禁用自动居中显示
  307. gridster.$el.css({margin:0});
  308. // $(wd.topWindow.wd.base.applyIframeElement).css({marginLeft:""}).attr("width","100%");
  309. //对齐首页图片按钮
  310. // var offsetleft=wd.topWindow.wd.base.applyIframeElement.parentNode.offsetLeft;
  311. // $("#pg_cj").css({left:Math.abs(offsetleft)});
  312. //显示选择部件栏
  313. var pg_cjTop=$("#pg_cj").offset().top+"px";
  314. $("#pg_cj").css("height","calc(100% - "+pg_cjTop+" )");
  315. };
  316. this.noedit = function() {
  317. this.isEditing = false;
  318. this.gridster.disable();
  319. this.gridster.disable_resize();
  320. edit_en = false;
  321. // 隐藏关闭按钮
  322. $(".close").css("display","none");
  323. //关闭遮罩层
  324. $("#slder,.grsymask").slideUp("slow");
  325. //移除 对齐首页图片按钮
  326. $("#pg_cj").css({left:0});
  327. //移除选择部件栏
  328. $("#pg_cj").css('top', '0px');
  329. //恢复自动居中显示
  330. this.gridster.$el.css({margin:"",left:""});
  331. wd.topWindow.wd.base.refreshApplyIframeHeight();
  332. };
  333. this.closediv = function(obj) {
  334. // console.info('关闭部件的id: ' + obj.id);
  335. var msg = this.ajax_getBuJianCode({serviceType:3,del:obj.id});
  336. if (edit_en) {
  337. this, gridster.remove_widget(obj, null);
  338. }
  339. };
  340. // ajax方法 获取部件使用参数[bjid(当不是新增时不返回id,根据isAddBj标志位判断),bjlb,bj初始化服务地址]
  341. this.getParams = function(_url) {
  342. var data;
  343. $.ajax({
  344. type : "POST",
  345. url : this.ajaxUrl + _url,
  346. data : {},
  347. dataType : "json",
  348. async : false,
  349. success : function(arg) {
  350. data = arg;
  351. }
  352. });
  353. return data;
  354. };
  355. this.changeRootTitle = function() { // 将当前路径恢复为"个人首页"
  356. try {
  357. wd.topWindow.initialMenuPath();
  358. } catch (e) {
  359. // console.info("wzchange()失效,当前可能为后台页面");
  360. }
  361. }
  362. this.rollBackChangeAndExit = function() { // 退出(Gridser页面刷新),rollback指将未执行保存的数据纪录回滚
  363. var saveStr = this.myserialize();
  364. var result = this.ajax_getBuJianCode({serviceType:5,json: saveStr});
  365. if (SESSION_STATE == "SESSION_STATE_APP_NETWORK") { // 判断是否为前台页面,后台页面不关闭编辑菜单
  366. this.noedit();
  367. } else {
  368. // alert('保存');
  369. }
  370. };
  371. // 传入部件id进行刷新
  372. this.flushBj = function(bjId, icon) {
  373. if (-1 == bjId.indexOf("#")) { // 考虑不带#号传入情况
  374. bjId = "#" + bjId;
  375. }
  376. var id;
  377. var bjLb;
  378. var initUrl;
  379. id = $(bjId).attr("id");
  380. bjLb = $(bjId).attr("bjlb");
  381. initUrl = $(bjId).attr("initurl");
  382. //var loadingClass="home-todoPlugin-loadingIcon";
  383. // var $icon=$(icon);
  384. //$icon.addClass($icon.attr("refreshClass"));
  385. $(bjId+" ."+this.containerForLoad).load(initUrl, {
  386. "sybjId" : id,
  387. "sybjLb" : bjLb
  388. }, function() {
  389. //$(icon).removeClass(loadingClass);
  390. //$(icon).css('background-image','url(/wd/theme/standard/img/refresh.png)');
  391. //$(icon).css('background-size','');
  392. });
  393. };
  394. this.refreshHomeplugin=function(bjlbm){
  395. var THIS=this;
  396. var result="0";
  397. this.gridster.$el.children("[initurl][bjlb="+bjlbm+"]").each(function(){
  398. result="1"
  399. THIS.flushBj($(this).attr("id"));
  400. })
  401. return result;
  402. }
  403. // “鼠标进入后才出现个人首页部件的滚动条”效果实现方法,如果注释掉这个js,会导致按钮无法点击并刷新个人首页
  404. this.scrollEvent = function(bjId) {
  405. //var item = $(bjId).find('#sybjBodyInner');
  406. //item.unbind('mouseover').bind('mouseover', 'div', function() {
  407. // this.style.overflowY = this.style.overflowX = "auto";
  408. //});
  409. //item.unbind('mouseout').bind('mouseout', 'div', function() {
  410. // this.style.overflowY = this.style.overflowX = "hidden";
  411. //});
  412. // $(bjId).find("#shList,#sqList,#wenzList,#tzList,#gzList,.itemList,#sybjBodyInner").css({"height":"100%"});
  413. // var group="#wenzList,#tzList,#gzList,.itemList,#sybjBodyInner";
  414. // $(bjId).find(group).css({"height":"100%"});
  415. // $(bjId).on("mouseout",function(){
  416. // $(this).find(group).css({"overflowY":"hidden","width":$(this).find('#sybj').width() - 10});
  417. // }).on("mouseover",function(){
  418. // $(this).find(group).css({"overflowY":"auto","overflowX":"hidden"});
  419. // }).trigger("mouseout").trigger("mouseover");
  420. //$(bjId).on("mouseout",function(){
  421. // $(this).find("#shList,#sqList,#wenzList,#tzList,#gzList,.itemList").css({"width":$(this).find('#sybj').width() - 5});
  422. // }).on("mouseover",function(){
  423. // $(this).find("#sybjBodyInner").css({"overflowY":"auto","overflowX":"hidden"});
  424. // }).trigger("mouseout").trigger("mouseover");
  425. }
  426. // 模板方法
  427. // 模板ajax方法,保存,另存为,删除
  428. this.ajax_Mb = function(arg,reqdata) {
  429. if(!reqdata)reqdata={}
  430. var d;
  431. $.ajax({
  432. type : "POST",
  433. url : "/desktopDef?" + arg, // "geXingHuaGf.do?" +。Lin
  434. data : reqdata,
  435. dataType : "json",
  436. async : false,
  437. success : function(data) {
  438. // console.info('data: ' + data);
  439. if (data['needFlush'] == 1) {
  440. // window.location.reload();
  441. var iframe = top.window.document.querySelector("iframe[oriSrc]");
  442. iframe.src = iframe.getAttribute("oriSrc");
  443. } else {
  444. d = data;
  445. }
  446. if (data['newValue'] != 'undefined') {
  447. $("#mbselect").append(
  448. "<option value='" + data['newValue'] + "'>"
  449. + data['newMc'] + "</option>");
  450. }
  451. }
  452. });
  453. return d;
  454. };
  455. this.selectMB = function(gfmbymid) {
  456. this.ajax_Mb("serviceType=9&select=" + gfmbymid);
  457. };
  458. this.exitMB = function(exit) {
  459. var saveStr = this.myserialize();
  460. this.ajax_Mb("serviceType=10&exit=" + exit,{json:saveStr} );
  461. // SYBJCTRL.SaveRollBackAndExit();
  462. this.changeRootTitle();
  463. };
  464. this.addMB = function() {
  465. var name = prompt("新模板名称", "未定义");
  466. if (name != null && name != "") {
  467. this.ajax_Mb("serviceType=6&addMB=" + name);
  468. }
  469. };
  470. this.saveAsMB = function() {
  471. // var name = prompt("另存为模板名称", "未定义");
  472. // if (name != null && name != "") {
  473. // var bjjson = this.myserialize();
  474. // this.ajax_Mb("serviceType=12&newMc=" + name ,{bjjson:bjjson});
  475. // }
  476. var mycallback=(function(t){
  477. var THIS=t;
  478. return function(data){
  479. var bjjson = THIS.myserialize();
  480. /* 改,增加 描述 字段值
  481. THIS.ajax_Mb("serviceType=12",{newMc:data.mc,grsymbh:data.grsymbh,bjjson:bjjson});
  482. */ THIS.ajax_Mb("serviceType=12",
  483. {newMc:data.mc,grsymbh:data.grsymbh,ms:data.ms,bjjson:bjjson});
  484. }
  485. })(this)
  486. wd.display.confirm({title:"另存为新模板",url:"/page/desktopDefAdd.jsp?mc=未定义",width:500,callback:mycallback});
  487. };
  488. this.delMB = function() {
  489. this.ajax_Mb("serviceType=7&delMB=1");
  490. };
  491. this.resetMB = function() {
  492. if (confirm("重置操作不可恢复")) {
  493. this.ajax_Mb("serviceType=11&reset=1");
  494. }
  495. };
  496. this.winFromBjId = "";
  497. // 事件控制 主要为关闭弹窗后的回调方法提供接口,实现调用弹窗的首页部件的刷新
  498. this.EventCtrl = {
  499. setBjId : function(bjid) { // 设入调用弹窗的具体部件Id
  500. this.winFromBjId = bjid;
  501. // console.info("EventCtrl.setBjId: 值为"+this.winFromBjId);
  502. },
  503. FlushBj : function() {
  504. var winFromBjId = this.winFromBjId;
  505. sybjCtrl.flushBj(winFromBjId);
  506. }
  507. };
  508. ////////////////////////////////////////////////
  509. this.areaInArea=function(A,B){
  510. var x_s1=A[0][0];
  511. var x_e1=A[1][0];
  512. var x_s2=B[0][0];
  513. var x_e2=B[1][0];
  514. var y_s1=A[0][1];
  515. var y_e1=A[1][1];
  516. var y_s2=B[0][1];
  517. var y_e2=B[1][1];
  518. var x_overlap=!(x_e1 <= x_s2 || x_e2 <= x_s1);
  519. var y_overlap=!(y_e1 <= y_s2 || y_e2 <= y_s1);
  520. return x_overlap&&y_overlap;
  521. }
  522. return this;
  523. };
  524. //left=5+(x-1)(20+5+5)
  525. //x=(left-5)/(20+5+5)+1
  526. function calLeftAndTop(v) {
  527. v=parseInt(v);
  528. return Math.max( parseInt((v-margins)/(dimensions+margins+margins)+1),1);
  529. // var a = 0;
  530. // var b = 0;
  531. // if (v <= 0 || v <= dimensions / 2)
  532. // return 1;
  533. // for (var j = 0; j < 100; j++) {
  534. // b = dimensions * (j - 1) + j * margins * 2
  535. //
  536. // if (a <= v && b >= v) {
  537. // if (j == 0) {
  538. // if ((b + a) / 2 > v) {
  539. // return 1;
  540. // } else {
  541. // return 1;
  542. // }
  543. // } else {
  544. // if ((b + a) / 2 > v) {
  545. // return j - 1;
  546. // } else {
  547. // return j;
  548. // }
  549. // }
  550. // }
  551. // a = b;
  552. // }
  553. // return 100;
  554. }
  555. //width=20+(x-1)(20+5+5)
  556. //x=(width-20)/(20+5+5)+1
  557. function calWidthAndHeight(v) {
  558. v=parseInt(v);
  559. return Math.max( parseInt((v-dimensions)/(dimensions+margins+margins)+1),1);
  560. // var a = 0;
  561. // var b = 0;
  562. // if (v <= 0 || v <= dimensions / 2)
  563. // return 1;
  564. // for (var j = 0; j < 100; j++) {
  565. // b = dimensions * j + margins * (j - 1) * 2;
  566. //
  567. // // console.log(b+" "+a)
  568. // if (a <= v && b >= v) {
  569. // if (j == 0) {
  570. // if ((b + a) / 2 > v) {
  571. // return 1;
  572. // } else {
  573. // return 1;
  574. // }
  575. // } else {
  576. // if ((b + a) / 2 > v) {
  577. // return j - 1;
  578. // } else {
  579. // return j;
  580. // }
  581. // }
  582. // }
  583. // a = b;
  584. // }
  585. // return 100;
  586. }