課程
/前端開發(fā)
/JavaScript
/可調(diào)大小面板實(shí)現(xiàn)(Resizeable Panel)
2014-09-21
源自:可調(diào)大小面板實(shí)現(xiàn)(Resizeable Panel) 2-5
正在回答
public?class?Test{ ????public?static?void?main(String?args[]?){ ????????System.out.println(?"我去年買了個(gè)..."); ????} }
風(fēng)格的確值得吐槽。如果做成項(xiàng)目中復(fù)用的話,建議直接寫成 Jquery的插件。這樣調(diào)用就行了 ?$('#div').resizeable();
代碼如下:
$.fn.resizeable?=?function(){ ?$(this).each(function(){ ???Resizable(?$(this).attr('id')?) }) } //??設(shè)置某個(gè)面板支持調(diào)整大小 function?Resizable(panelId)?{ ????if?(!window.__resizable_var)?{ ????????with?(window)?{ ????????????//??ctrl?:控制元素,panel?:面板?,?type?類型 ????????????m_panel?=?1,?m_ctrl?=?1?,?m_type?=?1 ????????????//??move:???????是否偵聽鼠標(biāo)移動(dòng),? ????????????//??m_start_x:??鼠標(biāo)相對(duì)ctrl元素的left、right? ????????????//??m_to_x:?鼠標(biāo)的新位置 ????????????moving?=?0?,?m_start_x?=?0?,?m_start_y?=?0?,?m_to_x?=?0?,?m_to_y?=?0; ????????????//??面板最小尺寸 ????????????m_min_w?=?100,?m_min_h?=?40; ????????} ????} ????var?panel?=?document.getElementById(panelId); ????//??插入調(diào)整控制元素 ????var?r?=?document.createElement("div"); ????var?b?=?document.createElement("div"); ????var?rb?=?document.createElement("div"); ????r.class?=?r.className?=?'ui-Resizable-r??ui-Resizable-ctrl'; ????b.class?=?b.className?=?'ui-Resizable-b??ui-Resizable-ctrl'; ????rb.class?=?rb.className?=?'ui-Resizable-rb?ui-Resizable-ctrl'; ????panel.appendChild(r); ????panel.appendChild(b); ????panel.appendChild(rb); ????//??鼠標(biāo)移動(dòng)處理 ????function?on_move()?{ ????????if?(moving)?{ ????????????//??計(jì)算最小的?left?和?top?(使panel的新大小不能小于自身的位置) ????????????var?min_left?=?0 ????????????var?min_top?=?0 ????????????var?to_x?=?Math.max(min_left?+?m_min_w,?m_to_x?-?m_start_x); ????????????var?to_y?=?Math.max(min_top?+?m_min_h,?m_to_y?-?m_start_y); ????????????//??元素的新位置?=?鼠標(biāo)新位置?-?鼠標(biāo)相對(duì)元素的位置s ????????????switch?(m_type)?{ ????????????????case?'r'?: ????????????????????m_ctrl.style.left?=?to_x?+?"px"; ????????????????????m_panel.style.width?=?to_x?+?10?+?'px'; ????????????????????break; ????????????????case?'b'?: ????????????????????m_ctrl.style.top?=?to_y?+?"px"; ????????????????????m_panel.style.height?=?to_y?+?10?+?'px'; ????????????????????break; ????????????????case?'rb'?: ????????????????????m_ctrl.style.left?=?to_x?+?"px"; ????????????????????m_ctrl.style.top?=?to_y?+?"px"; ????????????????????m_panel.style.width?=?to_x?+?20?+?'px'; ????????????????????m_panel.style.height?=?to_y?+?20?+?'px'; ????????????????????break; ????????????} ????????} ????} ????//???在控制元素中按下 ????function?on_mousedown(e,?panel,?ctrl,?type)?{ ????????var?e?=?e?||?window.event; ????????//??計(jì)算出鼠標(biāo)頁面位置?和?當(dāng)前元素位置的差?=?鼠標(biāo)相對(duì)元素的位置 ????????m_start_x?=?e.pageX?-?ctrl.offsetLeft; ????????m_start_y?=?e.pageY?-?ctrl.offsetTop; ????????m_panel?=?panel; ????????m_ctrl?=?ctrl; ????????m_type?=?type; ????????//??開始處理移動(dòng)事件 ????????moving?=?setInterval(on_move,?10); ????} ????//??為調(diào)整控制元素設(shè)置拖拽處理 ????r.addEventListener('mousedown',?function?(e)?{ ????????on_mousedown(e,?panel,?r,?'r'); ????}) ????b.addEventListener('mousedown',?function?(e)?{ ????????on_mousedown(e,?panel,?b,?'b'); ????}) ????rb.addEventListener('mousedown',?function?(e)?{ ????????on_mousedown(e,?panel,?rb,?'rb'); ????}); ????if?(!window.__resizable_var)?{ ????????//??頁面鼠標(biāo)移動(dòng)偵聽處理 ????????document.addEventListener('mousemove',?function?(e)?{ ????????????var?e?=?window.event?||?e; ????????????m_to_x?=?e.pageX; ????????????m_to_y?=?e.pageY; ????????}) ????????//??鼠標(biāo)彈起處理 ????????document.addEventListener('mouseup',?function?(e)?{ ????????????clearInterval(moving); ????????????var?cls?=?document.getElementsByClassName('ui-Resizable-ctrl'); ????????????for?(var?i?=?0;?i?<?cls.length;?i++)?{ ????????????????cls[i].style.left?=?''; ????????????????cls[i].style.top?=?''; ????????????} ? ????????}) ????????window.__resizable_var?=?true; ????} }
哈哈,這個(gè)老師會(huì)在后面做組件時(shí)進(jìn)行規(guī)范的。
舉報(bào)
前端UI組件倉庫必備,先從分析實(shí)現(xiàn)原理到步驟分解,走完全過程
2 回答鼠標(biāo)當(dāng)前x軸 減去 鼠標(biāo)在控制元素上x軸的偏移 這樣為什么就是控制元素的Left了?這到底是怎么算的?。壳蟠笊窠鉀Q
1 回答r.class=r.className=''
3 回答
2 回答
1 回答
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2014-09-28
2014-09-23
風(fēng)格的確值得吐槽。如果做成項(xiàng)目中復(fù)用的話,建議直接寫成 Jquery的插件。這樣調(diào)用就行了 ?$('#div').resizeable();
代碼如下:
2014-09-22
哈哈,這個(gè)老師會(huì)在后面做組件時(shí)進(jìn)行規(guī)范的。