1 function FloatHelper() { 2 } 3 4 FloatHelper.prototype.showFloater = function (Target, Title, Action, ActionCallback, Callback, IsNeedTemplete) { 5 this.hideFloater(); 6 var FloaterID = "Float_" + Title; 7 var Floater = $("#" + FloaterID); 8 if (Floater.length == 0) { 9 var newFloater = $("<div>"); 10 newFloater.addClass("Absolute FloatDiv"); 11 newFloater.attr("id", FloaterID); 12 Floater = newFloater; 13 14 if (IsNeedTemplete == undefined || IsNeedTemplete == null || IsNeedTemplete) { 15 var newDiv = $("<div>"); 16 newDiv.addClass("Template_HoverHead"); 17 var newSpan = $("<span>"); 18 newSpan.addClass("title"); 19 newSpan.html(Title); 20 newDiv.append(newSpan); 21 22 var newActionDiv = $("<div>"); 23 newActionDiv.addClass("HoverHead_Buttons Right"); 24 var newInput = $("<input>"); 25 newInput.attr({ 26 "type": "button", 27 "value": Action 28 }); 29 30 if (ActionCallback != undefined && ActionCallback != null) { 31 newActionDiv.on("click", ActionCallback); 32 newFloater.css("cursor", "pointer").click(ActionCallback); 33 $("[data-name=" + Title + "]").css("cursor", "pointer").click(function (event) { 34 event.preventDefault ? event.preventDefault() : event.returnvalue = false; 35 ActionCallback(); 36 }); 37 } 38 39 newInput.addClass("Action"); 40 newActionDiv.append(newInput); 41 newDiv.append(newActionDiv); 42 newFloater.append(newDiv); 43 } 44 $(doc.body).append(newFloater); 45 } else { 46 Floater.show(); 47 } 48 49 var top, left, TargetTop, width; 50 51 if (Target != null) { 52 width = Target.width(); 53 TargetTop = Target.offset().top; 54 top = Math.ceil(TargetTop - Floater.height()); 55 left = Target.offset().left; 56 Floater.css({ 57 "top": top + "px", 58 "left": left + "px", 59 "width": width + "px" 60 }); 61 this.showOutLine(Title); 62 if (Callback != undefined && Callback != null) { 63 Callback(); 64 } 65 } 66 }; 67 68 FloatHelper.prototype.hideFloater = function (Callback) { 69 var FloatDiv = $(".FloatDiv"); 70 if (FloatDiv.is(":visible")) { 71 FloatDiv.remove(); 72 this.hideOutline(); 73 if (Callback != undefined && Callback != null) { 74 Callback(); 75 } 76 } 77 }; 78 79 FloatHelper.prototype.resize = function (Callback) { 80 var FloatDiv = $(".FloatDiv:visible"); 81 if (FloatDiv.length > 0) { 82 var name = FloatDiv.attr("id").replace("Float_", ""); 83 var Target = $("[data-name = " + name + "]"); 84 var width, top, left; 85 if (FloatDiv.is(":visible")) { 86 top = Target.offset().top; 87 left = Target.offset().left; 88 width = Target.width(); 89 if (width < 180) { 90 width = 180; 91 } 92 FloatDiv.css({ 93 "width": width, 94 "top": top, 95 "left": left 96 }); 97 if (Callback != undefined && Callback != null) { 98 Callback(); 99 } 100 } 101 } 102 }; 103 104 FloatHelper.prototype.showOutLine = function (name) { 105 var target = $(".FloatDiv:visible"); 106 var Floater; 107 if (target.length > 0) { 108 name = name || target.attr("id").replace("Float_", ""); 109 var editableDiv = $("[data-name =" + name + " ]"); 110 try { 111 this.hideOutline(); 112 } catch (e) { 113 114 } 115 editableDiv.css("outline", "solid 6px #fdc666"); 116 Floater = $("#Float_" + name); 117 var w = editableDiv.width() + 12 + Math.round(editableDiv.css("padding-left").match(/^[0-9]*/g)[0]) + Math.round(editableDiv.css("padding-right").match(/^[0-9]*/g)[0]); 118 if (w <= 180) { 119 w = 180; 120 editableDiv.css("width", w - 12); 121 editableDiv.find("ul").addClass("Right Less180"); 122 } else { 123 editableDiv.find("ul.Right.Less180").removeClass("Right"); 124 } 125 Floater.css({ 126 "width": w, 127 "left": editableDiv.offset().left - 6, 128 "top": Math.ceil(editableDiv.offset().top - Floater.height()) 129 }); 130 if (name == "Background") { 131 Floater.css("top", editableDiv.offset().top); 132 } 133 } 134 }; 135 136 FloatHelper.prototype.hideOutline = function () { 137 _.each($("[data-editable = True]"), function (item) { 138 if (item) { 139 $(item).css("outline", "none"); 140 } 141 }); 142 };
可视化建站这个项目中的Js,除了DialogHelper,其他的都是自己完成的,感觉自己真厉害啊,虽然写的不是那么完善,可能还会有各种bug,但是很高兴,自己终于完成了,赞自己一次。
下班回家喽!