javascript+jquery+jqueryUI 模仿window窗体

23 篇文章 0 订阅
7 篇文章 0 订阅

/**
 * @author Pan
 * @param #选取id
 * @param .选取class 返回array
 * @param 不加标识默认返回class第一个
 */
function $$(name){

    if (name.indexOf('#') == 0) {
        var str = name.replace('#', '');
        return document.getElementById(str);
    }
    if (name.indexOf('.') == 0) {
        return document.getElementsByClassName(name.replace('.', ''))[0];
    }
    return document.getElementsByClassName(name);
}

//必须要在这里写获取对象,否则对象为null
window.onload = function(){

    //给左侧菜单注册事件
    var obj = $$('.menu-list');
    var lis = obj.getElementsByTagName('li');
    for (var i = 0; i < lis.length; i++) {
        var elem = lis[i];
        elem.onclick = function(){
            menuClick(this);
        };
    }
    //移除所有li的事件
    try {
        var menus = $$('lef-menus');
        for (var i = 0; i < menus.length; i++) {
            var ul = menus[i];
            var lis = ul.getElementsByTagName('li');
            for (var j = 0; j < lis.length; j++) {
                var li = lis[j];
                if (!(typeof li == "undefined")) {
                    li.onclick = function(e){
                        if (e && e.stopPropagation) {//非IE浏览器
                            e.stopPropagation();
                        }
                        else {//IE浏览器
                            window.event.cancelBubble = true;
                        }
                        liSelect(this);
                    };
                }
            }
        }
    } 
    catch (e) {
        alert(e + "li");
    }
    
};

function LightForm(){
    var bol = false;
    var parent = null;
    var text = "新窗体";
    var src = "";
    var frameId = "mainFrame";
    var position = eval('(' + "{'top':'0','left':'0','width':'500','height':'350'}" + ')');
    var objHTML = '<div class="iframe-item" style="height:${height};width:${width};left:${left};top:${top};z-index:1;">';
    objHTML += '<div class="iframe-title"><b class="form-icon" id="${formIcon}"></b><span>${text}</span>';
    objHTML += '<div class="ctrls-icon">';
    objHTML += '<b id="min-btn" title="最小化"></b>';
    objHTML += '<b id="max-btn" title="最大化"></b>';
    objHTML += '<b id="close-btn" title="关闭"></b>';
    objHTML += '</div>';
    objHTML += '</div>';
    objHTML += '<iframe src="${src}" scrolling="yes" id="${id}"></iframe>';
    objHTML += '</div>';
    
    var formIcon = "";
    //图标的id
    this.setIcon = function(id){
        formIcon = id;
    };
    //是否最大化
    this.setMax = function(bl){
        if (bl != null) {
            bol = bl;
        }
    };
    //框架载入的网页目标
    this.setSrc = function(url){
        src = url;
    };
    //标题
    this.setText = function(str){
        text = str;
    };
    //设置id
    this.setId = function(str){
        frameId = str;
    };
    //大小
    this.setSize = function(w, h){
        position.width = w;
        position.height = h;
    };
    //位置
    this.setLocation = function(x, y){
        position.left = x;
        position.top = y;
    };
    //默认显示在中间
    this.showCenter = function(){
        //计算top和left
        var left = parent.offsetWidth / 2 - position.width / 2;
        var top = parent.offsetHeight / 2 - position.height / 2;
        position.top = top;
        position.left = left;
        
    };
    //创建对象
    this.create = function(contaier){
        parent = $$(contaier)[0];
    };
    //显示对象
    this.show = function(){
        //替换内容
        zIndex();//重置其他对象的z-index为0 使其显示在最上面
        var html = objHTML.replace('${text}', text).replace('${src}', src).replace('${id}', frameId);
        html = html.replace('${width}', position.width + "px").replace('${height}', position.height + "px").replace('${left}', position.left + "px").replace('${top}', position.top + "px").replace('${formIcon}', formIcon);
        $(parent).append(html); //追加元素
        $(".iframe-item").draggable({
            containment: 'parent'
        }); //注册拖拽事件
        $(".iframe-item").resizable({
            containment: 'parent'
        }); //注册resize事件
        this.read();//调用read 注册事件
    };
    
    this.read = function(){
        //给div窗体注册down事件
        try {
            var items = $$('iframe-item');
            for (var i = 0; i < items.length; i++) {
                var item = items[i].getElementsByClassName('iframe-title')[0]; //获取实例
                //注册单击事件
                item.onmousedown = function(){
                    dragClick(this);
                };
                //注册双击事件
                item.ondblclick = function(){
                    formDobleClick(this);
                };
            }
        } 
        catch (e) {
            alert(e + "注册出错");
        }
        
        //给窗体的最大化最小化关闭注册事件
        
        try {
            var ctrls = $$('ctrls-icon');
            for (var i = 0; i < ctrls.length; i++) {
                //取得按钮面板
                var btnPanel = ctrls[i];
                var btns = btnPanel.getElementsByTagName('b');
                //循环的注册事件
                for (var j = 0; j < btns.length; j++) {
                    var btn = btns[j];
                    //设置一个自定义的属性标记当前是否最大化
                    btn.setAttribute('max', false);
                    btn.onclick = function(){
                        windowBtnAddEvent(this);
                    };
                }
            }
            
        } 
        catch (e) {
            alert(e);
        }
        
    };
}

//窗体标题栏的双击事件
function formDobleClick(obj){
    //最大化对象
    try {
        var elem = obj.getElementsByClassName('ctrls-icon')[0];
        var maxBtn = elem.getElementsByTagName('b')[1];
        var max = maxBtn.getAttribute("max");
        var parent = obj.parentElement;
		
		 if (max == 'false') {
            var position = "{ 'top': '" + parent.offsetTop + "px', 'left': '" + parent.offsetLeft + "px','width': '" + parent.offsetWidth + "px','height':'" + parent.offsetHeight + "px'}";
            maxBtn.setAttribute('pos', position);
            parent.style.left = "0px";
            parent.style.top = "0px";
            parent.style.width = "100%";
            parent.style.height = "100%";
            maxBtn.setAttribute('max', true);
            
        }else {
            var position = eval('(' + maxBtn.getAttribute("pos") + ')');
            maxBtn.setAttribute('max', false);
            parent.style.left = position.left;
            parent.style.top = position.top;
            parent.style.height = position.height;
            parent.style.width = position.width;
        }

    } 
    catch (e) {
        alert(e);
    }
    
}

function windowBtnAddEvent(obj){
    switch (obj.id) {
        case "min-btn":
            btnMin(obj);
            break;
        case "max-btn":
            btnMax(obj);
            break;
        case "close-btn":
            btnClose(obj);
            break;
    }
}


function btnMax(obj){
    //最大化对象
    var max = obj.getAttribute("max");
    try {
        var parent = obj.parentElement.parentElement.parentElement;
        if (max == 'false') {
            var position = "{ 'top': '" + parent.offsetTop + "px', 'left': '" + parent.offsetLeft + "px','width': '" + parent.offsetWidth + "px','height':'" + parent.offsetHeight + "px'}";
            obj.setAttribute('pos', position);
            parent.style.left = "0px";
            parent.style.top = "0px";
            parent.style.width = "100%";
            parent.style.height = "100%";
            obj.setAttribute('max', true);
            
        }
        else {
            var position = eval('(' + obj.getAttribute("pos") + ')');
            obj.setAttribute('max', false);
            parent.style.left = position.left;
            parent.style.top = position.top;
            parent.style.height = position.height;
            parent.style.width = position.width;
        }
    } 
    catch (e) {
        alert(e);
    }
}

function btnMin(obj){
    try {
        var parent = obj.parentElement.parentElement.parentElement;
        parent.style.height = "35px";
    } 
    catch (e) {
        alert(e);
    }
}

//关闭当前对象
function btnClose(obj){
    var form = obj.parentElement.parentElement.parentElement;//b的父容器的父容器的父容器
    var parentform = form.parentElement; //窗体的父容器
    parentform.removeChild(form); //移除对象
}

function liSelect(obj){
    //alert(obj.textContent);
    //存在就创建,不存在就不创建
    //获得对象,然后循环判断
    var ar = findParentName(obj.textContent);
    var str = ar + '-' + '<a href="#">' + obj.textContent + '</a>';
    setNav(str);
    
    var parent = $$('.work-content');
    var nodes = parent.getElementsByClassName('iframe-item');
    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        node.style.zIndex = 0;
    }
    try {
    
        for (var i = 0; i < nodes.length; i++) {
            var node = nodes[i].getElementsByClassName('iframe-title')[0];
            if (obj.textContent == node.textContent) {
                node.parentElement.style.zIndex = 1;
                return;
            }
        };
            } 
    catch (e) {
        alert(e);
    };
    
    //获取icon 的id
    var pelem = obj.parentElement.parentElement;
    var b = pelem.getElementsByTagName('b')[0];
    
    //创建对象
    var form = new LightForm();
    form.create('work-content');
    form.setText(obj.textContent);
    form.setSize(800, 500);
    form.setIcon(b.id);
    form.showCenter();
    form.show();
}

//设置所有的窗体z-index 为0
function zIndex(){

    var nodes = $$('iframe-item');
    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        node.style.zIndex = 0;
    }
    
}

//为所有拖拽对象注册事件  鼠标按下时,将当前对象显示在其他窗体的前面
function dragClick(obj){
    //alert(obj.textContent);
    //将当前对象置顶
    //取得父元素
    try {
        var parent = obj.parentElement.parentElement;
        var nodes = parent.getElementsByClassName('iframe-item');
        for (var i = 0; i < nodes.length; i++) {
            var elem = nodes[i];
            elem.style.zIndex = 0;
        }
        //设置当前对象在最前面
        obj.parentElement.style.zIndex = 1;
        
        var ar = findParentName(obj.textContent);
        var str = ar + '-' + '<a href="#">' + obj.textContent + '</a>';
        setNav(str);
    } 
    catch (e) {
        alert(e);
    }
}

function setNav(str){
    var title = $$('.title-label');
    title.innerHTML = str;
}

//通过名字寻找父分类
function findParentName(str){
    var menus = $$('lef-menus');
    for (var i = 0; i < menus.length; i++) {
        var ul = menus[i];
        var lis = ul.getElementsByTagName('li');
        var text = ul.parentElement.getElementsByTagName('a')[0].textContent;
        for (var j = 0; j < lis.length; j++) {
            var content = lis[j].textContent;
            if (content == str) {
                return text;
            }
        }
    }
    return "";
}

function menuClick(obj){
    //点击的时候展开和收缩对象
    //初始大小=35px
    //循环取出当前对象里面的所有子元素的高度
    var nodes = obj.getElementsByTagName('ul')[0];
    var height = nodes.offsetHeight + obj.offsetHeight;
    if (obj.offsetHeight == 35) {
        obj.style.height = height + "px";
    }
    else {
        obj.style.height = "35px";
    }
    
    
}


截图:

javascript code:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值