⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 widget.js

📁 软件的主要特点: 1.专门针对有"验证码"要求的论坛. 2.可以完成如下功能: 自动发布新帖,自动回复指定帖,自动注册论坛帐号 (所有操作不能同时针对一个网站,因为有"验证码"要求的网站是每次打开一个
💻 JS
📖 第 1 页 / 共 3 页
字号:
// 메뉴에 마우스 클릭이 일어난 시점에 드래그를 위한 제일 첫 동작 (해당 object에 각종 함수나 상태변수 설정) function widgetDragEnable(obj, funcDragStart, funcDrag, funcDragEnd) {    // 상위 object에 드래그 가능하다는 상태와 각 드래그 관련 함수를 설정    obj.draggable = true;    obj.dragStart = funcDragStart;    obj.drag = funcDrag;    obj.dragEnd = funcDragEnd;    // 드래그 가능하지 않다면 드래그 가능하도록 상태 지정하고 mousemove이벤트 등록    if (!widgetDragManager.isDrag) {        widgetDragManager.isDrag = true;        xAddEventListener(document, 'mousemove', widgetDragMouseMove, false);    } } // 드래그를 시작할때 호출되는 함수 (이동되는 형태를 보여주기 위한 작업을 함)function widgetDragStart(tobj, px, py) {     if(tobj.className == 'widgetResize' || tobj.className == 'widgetResizeLeft' || tobj.className == 'widgetBoxResize' || tobj.className == 'widgetBoxResizeLeft') return;    var obj = widgetGetTmpObject(tobj);    xInnerHtml(obj, xInnerHtml(tobj));    xLeft(obj, xPageX(tobj));    xTop(obj, xPageY(tobj));    xWidth(obj, xWidth(tobj));    xHeight(obj, xHeight(tobj));    xDisplay(obj, 'block');}// 드래그 시작후 마우스를 이동할때 발생되는 이벤트에 의해 실행되는 함수function widgetDrag(tobj, dx, dy) {    var minWidth = 40;    var minHeight = 10;    var sx = xPageX(tobj.parentNode);    var sy = xPageY(tobj.parentNode);    var nx = tobj.xDPX;    var ny = tobj.xDPY;    var zoneWidth = xWidth(zonePageObj);    var zoneLeft = xPageX(zonePageObj);    var zoneRight = zoneLeft + zoneWidth;    var pWidth = xWidth(tobj.parentNode);    var cssFloat = getFloat(tobj.parentNode);    if(!cssFloat) cssFloat = 'left';    // 위젯 리사이즈 (우측)    if(tobj.className == 'widgetResize' || tobj.className == 'widgetBoxResize') {        if(nx < sx+minWidth) nx = sx+minWidth;        if(nx > zoneRight) nx = zoneRight;        if(cssFloat == 'right') nx = sx + pWidth;        var new_width = nx  - sx;        if(new_width < minWidth) new_width = minWidth;        var new_height = ny - sy;        if(new_height < minHeight) new_height = minHeight;        if( zoneRight < sx+new_width) new_width = zoneRight - sx;        // 위젯의 크기 조절        xWidth(tobj.nextSibling.nextSibling, new_width);        xHeight(tobj.nextSibling.nextSibling, new_height);        xWidth(tobj.parentNode, new_width);        xHeight(tobj.parentNode, new_height);    // 위젯 리사이즈 (좌측)    } else if(tobj.className == 'widgetResizeLeft' || tobj.className == 'widgetBoxResizeLeft') {        if(nx < zoneLeft) nx = zoneLeft;        if(cssFloat == 'left') nx = sx;        var new_width = pWidth + (sx - nx);        if(new_width < minWidth) new_width = minWidth;        var new_height = ny - sy;        if(new_height < minHeight) new_height = minHeight;        // 위젯의 크기 조절        xWidth(tobj.nextSibling, new_width);        xHeight(tobj.nextSibling, new_height);        xWidth(tobj.parentNode, new_width);        xHeight(tobj.parentNode, new_height);    // 위젯 드래그    } else {        var obj = widgetGetTmpObject(tobj);        xLeft(obj, parseInt(xPageX(obj),10) + parseInt(dx,10));        xTop(obj, parseInt(xPageY(obj),10) + parseInt(dy,10));        // 박스 안에 있을 경우에는 박스내의 위젯하고 자리를 바꾸고 그 외의 경우에는 박스를 빠져 나간다        if(tobj.parentNode != zonePageObj) {            // 박스내에 있는 위젯들을 구함            var widgetList = xGetElementsByClassName("widgetOutput",tobj.parentNode);            for(var i=0;i<widgetList.length;i++) {                var target_obj = widgetList[i];                var l =  xPageX(target_obj);                var t =  xPageY(target_obj);                var ll =  parseInt(l,10) + parseInt(xWidth(target_obj),10);                var tt =  parseInt(t,10) + parseInt(xHeight(target_obj),10);                if( tobj != target_obj && tobj.xDPX >= l && tobj.xDPX <= ll && tobj.xDPY >= t && tobj.xDPY <= tt && tobj.parentNode == target_obj.parentNode) {                    var next1 = target_obj.nextSibling;                    if(!next1) {                        next1 = xCreateElement("DIV");                        target_obj.parentNode.appendChild(next1);                    }                    var next2 = tobj.nextSibling;                    if(!next2) {                        next2 = xCreateElement("DIV");                        tobj.parentNode.appendChild(next2);                    }                    if(next1) next1.parentNode.insertBefore(tobj, next1);                    if(next2) next2.parentNode.insertBefore(target_obj, next2);                    doFitBorderSize();                    widgetList = null;                    return;                }            }            widgetList = null;            // 만약 다른 위젯과 자리를 바꾸지 못하였는데 자기 부모창밖에 있는게 확인이 되면 박스 밖으로 내보낸다.            var l =  xPageX(tobj.parentNode);            var t =  xPageY(tobj.parentNode);            var ll =  parseInt(l,10) + parseInt(xWidth(tobj.parentNode),10);            var tt =  parseInt(t,10) + parseInt(xHeight(tobj.parentNode),10);            if( (tobj.xDPX < l || tobj.xDPX > ll) || (tobj.xDPY < t || tobj.xDPY > tt) ) {                zonePageObj.insertBefore(tobj, tobj.parentNode.parentNode.parentNode);                doFitBorderSize();                return;            }        // 박스 밖에 있을 경우에는 다른 위젯과 자리를 바꾸거나 박스내에 들어가도록 한다        } else {            // 이동하려는 위젯이 박스 위젯이 아니라면 박스 위젯들을 구해서 입력 유무를 검사한다            if(tobj.getAttribute("widget")!="widgetBox") {                var boxList = xGetElementsByClassName("nullWidget", zonePageObj);                for(var i=0;i<boxList.length;i++) {                    var target_obj = boxList[i];                    xHeight(target_obj, xHeight(target_obj.parentNode));                    xWidth(target_obj, xWidth(target_obj.parentNode));                    var l =  xPageX(target_obj);                    var t =  xPageY(target_obj);                    var ll =  parseInt(l,10) + parseInt(xWidth(target_obj),10);                    var tt =  parseInt(t,10) + parseInt(xHeight(target_obj),10);                    if( tobj.xDPX >= l && tobj.xDPX <= ll && tobj.xDPY >= t && tobj.xDPY <= tt) {                        if(target_obj.className == "nullWidget") {                            target_obj.appendChild(tobj);                            // 이동을 멈춤                            widgetManualEnd();                                                        doFitBorderSize();                            boxList = null;                            return;                        }                    }                }                boxList = null;            }            // 다른 위젯들을 구해서 자리를 바꿈            var widgetList = xGetElementsByClassName("widgetOutput",zonePageObj);            for(var i=0;i<widgetList.length;i++) {                var target_obj = widgetList[i];                var widget = target_obj.getAttribute("widget");                if(widget == 'widgetBox' || target_obj.parentNode != zonePageObj) continue;                var l =  xPageX(target_obj);                var t =  xPageY(target_obj);                var ll =  parseInt(l,10) + parseInt(xWidth(target_obj),10);                var tt =  parseInt(t,10) + parseInt(xHeight(target_obj),10);                if( tobj != target_obj && tobj.xDPX >= l && tobj.xDPX <= ll && tobj.xDPY >= t && tobj.xDPY <= tt && tobj.parentNode == target_obj.parentNode) {                    var next1 = target_obj.nextSibling;                    if(!next1) next1 = target_obj.parentNode.lastChild;                    if(!next1) {                        next1 = xCreateElement("DIV");                        target_obj.parentNode.appendChild(next1);                    }                    var next2 = tobj.nextSibling;                    if(!next2) {                        next2 = xCreateElement("DIV");                        tobj.parentNode.appendChild(next2);                    }                    if(next1) next1.parentNode.insertBefore(tobj, next1);                    if(next2) next2.parentNode.insertBefore(target_obj, next2);                    doFitBorderSize();                    widgetList = null;                    return;                }            }            widgetList = null;        }    }}   // 드래그 종료 (이동되는 object가 이동할 곳에 서서히 이동되는 것처럼 보이는 효과)function widgetDragEnd(tobj, px, py) {    var obj = widgetGetTmpObject(tobj);    widgetDisapear = widgetDisapearObject(obj, tobj);    widgetDragDisable(tobj.getAttribute('id'));}// 스르르 사라지게 함 (일단 사라지게 하는 기능을 제거.. 속도 문제)function widgetDisapearObject(obj, tobj) {    xInnerHtml(tobj,xInnerHtml(obj));    xInnerHtml(obj,'');    xDisplay(obj, 'none');    obj.parentNode.removeChild(obj);    widgetTmpObject[tobj.id] = null;    return;    var it = 5;    var ib = 1;    var x = parseInt(xPageX(obj),10);    var y = parseInt(xPageY(obj),10);    var ldt = (x - parseInt(xPageX(tobj),10)) / ib;    var tdt = (y - parseInt(xPageY(tobj),10)) / ib;    return setInterval(function() {        if(ib < 1) {            clearInterval(widgetDisapear);            xInnerHtml(tobj,xInnerHtml(obj));            xInnerHtml(obj,'');            xDisplay(obj, 'none');            obj.parentNode.removeChild(obj);            widgetTmpObject[tobj.id] = null;            return;        }        ib -= 5;        x-=ldt;        y-=tdt;        xLeft(obj, x);        xTop(obj, y);    }, it/ib);}// 마우스다운 이벤트 발생시 호출됨function widgetMouseDown(e) {    var evt = new xEvent(e);    var obj = evt.target;    while(obj && !obj.draggable) {        obj = xParent(obj, true);    }    if(obj) {        xPreventDefault(e);        obj.xDPX = evt.pageX;        obj.xDPY = evt.pageY;        widgetDragManager.obj = obj;        xAddEventListener(document, 'mouseup', widgetMouseUp, false);        if (obj.dragStart) obj.dragStart(obj, evt.pageX, evt.pageY);    }}// 마우스 버튼을 놓았을때 동작될 함수 (각종 이벤트 해제 및 변수 설정 초기화)function widgetMouseUp(e) {     if (widgetDragManager.obj) {        xPreventDefault(e);        xRemoveEventListener(document, 'mouseup', widgetMouseUp, false);        if (widgetDragManager.obj.dragEnd) {            var evt = new xEvent(e);            widgetDragManager.obj.dragEnd(widgetDragManager.obj, evt.pageX, evt.pageY);        }         widgetDragManager.obj = null;        widgetDragManager.isDrag = false;    } }  // 드래그할때의 object이동등을 담당 function widgetDragMouseMove(e) {    var evt = new xEvent(e);    if(widgetDragManager.obj) {        xPreventDefault(e);        var obj = widgetDragManager.obj;        var dx = evt.pageX - obj.xDPX;        var dy = evt.pageY - obj.xDPY;        obj.xDPX = evt.pageX;        obj.xDPY = evt.pageY;        if (obj.drag) {            obj.drag(obj, dx, dy);        } else {            xMoveTo(obj, xLeft(obj) + dx, xTop(obj) + dy);        }    }}// 해당 object 에 더 이상 drag가 되지 않도록 설정function widgetDragDisable(id) {    if (!widgetDragManager) return;    var obj = xGetElementById(id);    obj.draggable = false;    obj.dragStart = null;    obj.drag = null;    obj.dragEnd = null;    //obj.style.backgroundColor = obj.getAttribute('source_color');    xRemoveEventListener(obj, 'mousedown', widgetMouseDown, false);    return;}// 강제로 드래그를 종료시킴function widgetManualEnd() {    var tobj = widgetDragManager.obj;    if(!tobj) return;    xRemoveEventListener(document, 'mouseup', widgetMouseUp, false);    var obj = widgetGetTmpObject(tobj);    widgetDisapear = widgetDisapearObject(obj, tobj);    widgetDragDisable(tobj.getAttribute('id'));    widgetDragManager.obj = null;    widgetDragManager.isDrag = false;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -