JQuery应用
/** Root相关操作 */
(function ($) {
$.fn.begindesign = function () {
var obj = this;
obj.addClass("root");
// 可选择
obj.selectable({filter:".component-bg"});
// 接收拖拽
obj.droppable({accept:".toolboxitem", drop:function (event, ui) {
$(this).addControl(ui.draggable[0].component, {x:event.clientX, y:event.clientY});
}});
// 鼠标单击
obj.click(function () {
//obj.focus();
});
// 鼠标移动
obj.mousemove(function (e) {
var offsetxy = getAbsPoint(obj[0]);// 画板对于屏幕的觉得位置
$("#stausbar").html("x=" + (e.clientX - offsetxy.x) + ", y=" + (e.clientY - offsetxy.y));
});
};
/**往目标添加组件, 组件类型, 屏幕pos*/
$.fn.addControl = function (componentSrc, pos) {
var obj = this;
// 新建HTML对象
var component_bg = $("<div>").addClass("component-bg");
var component = $("<" + componentSrc.type + ">").addClass("component");
var component_handle = $("<span>").addClass("component-handle");
// 初始化属性 begin----------------
var offsetxy = getAbsPoint(obj[0]);// 画板对于屏幕的觉得位置
// 修正新组件坐标为相对于画板
pos.x = pos.x - offsetxy.x;
pos.y = pos.y - offsetxy.y;
component_bg.css("position", "absolute").css("top", pos.y).css("left", pos.x);
// 属性
$.each(componentSrc.attr, function (i, n) {
component.attr(i, n);
});
// 大小
component_bg.width(componentSrc.size.defaultWidth).height(componentSrc.size.defaultHeight);
// 初始化属性 end----------------
// 显示
component_bg.appendTo(obj);
component.appendTo(component_bg);
component_handle.appendTo(component_bg);
// 组件相互存放
component_bg[0].component = component;
component_bg[0].component_handle = component_handle;
component[0].component_bg = component_bg;
component_handle[0].component_bg = component_bg;
// 移动
component_bg.resizable({minWidth:componentSrc.size.minWidth, minHeight:componentSrc.size.minHeight, maxWidth:componentSrc.size.maxWidth, maxHeight:componentSrc.size.maxHeight}).draggable({handle:component_handle});
component_handle.click(function (e) {
if (!e.ctrlKey) {
$(".ui-selected").removeClass("ui-selected");
}
$(this)[0].component_bg.addClass("ui-selected");
// 组件失去焦点
$(this)[0].component_bg[0].component.blur();
}).dblclick(function (e) {
// 组件获取焦点,可编辑状态
$(this)[0].component_bg[0].component.focus();
});
};
})(jQuery);
/**输出信息*/
function info(s) {
$("#consle").text($("#consle").text() + "\n>> " + s);
}
/**绝对坐标*/
function getAbsPoint(obj) {
var x, y;
oRect = obj.getBoundingClientRect();
x = oRect.left;
y = oRect.top;
return {x:x, y:y};
}
/**组件加载*/
(function ($) {
// 组件defaultSize
function ds() {
return {defaultWidth: 70, defaultHeight: 25, minWidth: 20, minHeight: 20, maxWidth: 300, maxHeight: 300};
}
// 所有组件
$.COMPONENTS = [
// 静态文本
{
type: "label",
display: "静态文本",
ico: "ico/label.bmp",
attr: {},
size: ds()
},
// 输入框
{
type: "input",
display: "输入框",
ico: "ico/text.bmp",
attr: {type: "text"},
size: $.extend(ds(), {defaultWidth: 150, defaultHeight: 25})
},
// 按钮
{
type: "input",
display: "按钮",
ico: "ico/button.bmp",
attr: {type: "button"},
size: ds()
},
// 文本域
{
type: "textarea",
display: "文本域",
ico: "ico/textarea.bmp",
attr: {},
size: $.extend(ds(), {defaultWidth: 250, defaultHeight: 120})
},
// 下拉框
{
type: "select",
display: "下拉框",
ico: "ico/select.bmp",
attr: {},
size: $.extend(ds(), {defaultWidth: 150, defaultHeight: 25})
},
// 复选框
{
type: "input",
display: "复选框",
ico: "ico/checkbox.bmp",
attr: {type: "checkbox"},
size: ds()
},
// 单选按钮
{
type: "input",
display: "选按钮",
ico: "ico/radio.bmp",
attr: {type: "radio"},
size: ds()
}
];
$.initToolbox = function (designerRoot, render) {
//var rID = "rID" + Math.round(Math.random() * 10000);
var tools = [];
// 加载工具
for (var i = 0; i < $.COMPONENTS.length; i++) {
var component = $.COMPONENTS[i];
var li = $("<li>").addClass("toolboxitem").addClass("ui-widget-header").appendTo(render);
li.css("background-image", "url(" + designerRoot + "/" + component.ico + ")");
var display = $("<span>").text(component.display).appendTo(li);
tools[i] = li;
li[0].component = component;
li.mousemove(function(e) {
$(this).addClass("ui-state-highlight").css("background-position", "center left").css("background-repeat", "no-repeat");
}).mouseout(function(e) {
$(this).removeClass("ui-state-highlight");
});
}
// 工具拖动
for (var i = 0; i < tools.length; i++) {
tools[i].draggable({revert:"invalid", helper:"clone", cursorAt:{cursor:"crosshair", top:0, left:0}});
}
};
})(jQuery);