图片拖拽布局

<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
    String contextPath = request.getContextPath();
%>
<!DOCTYPE HTML>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title></title>
        <link href="../style/base.css" rel="stylesheet" type="text/css">
        <link href="../style/ext-all.css" rel="stylesheet" type="text/css">
        <script type="text/javascript" src="../js/dialogShow.js"></script>
        <script src="js/jquery.js"></script>
        <style>
            *{padding:0px;margin:0px;}
            .layout,.all_content{max-width:100%;overflow:scroll;height:auto;position:relative;}
            .column{position:relative;width:100%;overflow:hidden;text-align:center}
            .column table{margin:0 auto}
            .column td{min-width:100px;font-size:20px;font-weight:800;cursor:pointer;text-align:center;}
            #newLayout,#content{width:auto;word-break:break-all;border:1px solid #4ccdf8;position:relative;}
            #newLayout{height:215px;}
            #newLayout>li,#content>li{width:40px;float:left;list-style:none;position:relative;}
            #newLayout>li>div,#content>li>div{border:1px solid #ccc;margin:10px 5px;width:28px;position:relative;height:28px;}
            #newLayout>li>div:first-child,#content>li>div:first-child{margin-top:5px;}
            .m{position:absolute;border:1px solid #4ccdf8;cursor: move;}
            .focus{background:#ccc;}
            .wrap{position:absolute;overflow:hidden;border:1px solid #4ccdf8;}
            .pagelist{z-index:1000;width:100%;position:relative;padding:3px;box-sizing:border-box;}
            .pagelist>li{list-style:none;float:right;margin:2px;padding:0 2px;background:#fff}
            .pagelist>li.foc{background:red}
            .tab_switchdraw_x {height: 31px;margin-top: 5px;overflow: hidden;    position: relative;    background: url(../images/bg_actlistcon.gif) repeat-x;width:100%}
            .tab_switchdraw_x ul {padding:2px 5px 0px 5px;box-sizing:border-box;}
            .tab_switchdraw_x li {float: left;padding-right: 3px;}
            .tab_switchdraw_x li a {display: block;min-width:45px;height:20px;padding:9px 3px 0 3px;text-align:center;text-decoration:none;color:#3965A3;line-height:12px;    background:url(../images/bg_actlist.jpg)no-repeat;font-size:14px;-webkit-background-size:100%;}
            .tab_switchdraw_x li a#this_datact {color: #515151;padding:9px 3px 0 3px;height:20px;background:url(../images/bg_actliston.jpg) no-repeat;-webkit-background-size:100%;}
            .page_line{position:relative;z-index:10000;width:100%;background: url(../images/in_m.jpg);background-size:100% 100%;line-height:40px;height:40px;color:#000000;margin-bottom:5px;margin-top:5px;overflow:hidden;text-align: center;}
            .button{padding: 0;margin:5px 8px;border: none;text-align: center;width: 100px;cursor: pointer;height: 24px;px;background: url(../images/but_guild_1.gif);background-size:100% 100%;color: #006ec1;font-size:14px;font-weight:600;word-spacing: 0;}
            .bg{position:fixed;width:100%;height:100%;background:rgba(102,102,102,0.3);top:0px;left:0px;z-index:10000;display:none}
            .dialogContent{background:#fff;width:760px;height:660px;top:50px;margin:0 auto;position:relative;overflow:hidden;-webkit-border-radius:10px;}
            .optTable{position:relative;width:96%;height:auto;left:2%;margin-top:5px;}
            .optTable>table{width:100%;background:#97b8e0}
            .optTable>table>tbody>tr>td:nth-child(1){line-height:30px;background:#fff;border:1px solid #97b8e0}
            .optTable>table>tbody>tr>td:nth-child(2){width:70%;line-height:30px;background:#fff;border:1px solid #97b8e0}
            .optTable input[type="text"],.optTable input[type="number"]{width:100px;}
            #btn_closedialog{top:5px}
            .bg td{font-size:13px;}
            #color td{width:20px;height:20px;font-size:13px;}
            #color #colorValue{font-size:14px;width:61px;}
            .imageView{position:relative;width:100%;height: 260px;overflow-y: scroll;}
            .imageView div{display:inline-block;margin:0px 5px}
            
            .rRightDown,.rLeftDown,.rLeftUp,.rRightUp,.rRight,.rLeft,.rUp,.rDown{
                position:absolute;
                background:transparent;
                width:10px;
                height:10px;
                z-index:5;
                font-size:0;
            }
            .rLeftDown,.rRightUp{cursor:ne-resize;}
            .rRightDown,.rLeftUp{cursor:nw-resize;}
            .rRight,.rLeft{cursor:e-resize;}
            .rUp,.rDown{cursor:n-resize;}
            .rLeftDown{left:-4px;bottom:-4px;}
            .rRightUp{right:-4px;top:-4px;}
            .rRightDown{right:-5px;bottom:-5px;}
            .rLeftUp{left:-4px;top:-4px;}
            .rRight{right:-4px;top:50%;margin-top:-4px;}
            .rLeft{left:-4px;top:50%;margin-top:-4px;}
            .rUp{top:-4px;left:50%;margin-left:-4px;}
            .rDown{bottom:-4px;left:50%;margin-left:-4px;}
            .bgDiv{width:600px; height:300px; border:10px solid #666666; position:relative;}
            .dragDiv{border:1px solid #000000; width:100px; height:60px; top:50px; left:50px; background:#fff;}
            .search{position:relative;top:-4px;width:300px;float:right;}
            .search input[type='text']{padding:2px;font: 15px arial;border: 1px solid #cdcdcd;border-color: #9a9a9a;outline: none;height:22px;}
            .search input[type='button']{margin:5px 0px;}
        </style>
    </head>
    <body >
        <form id="saveForm" action="saveLayoutInfo.do" >
        <s:hidden name="showSuccessDialog" id="showSuccessDialog"/>
        <s:hidden id="titleId" name="titleId"/>
        <s:hidden id="areaId" name="areaId"/>
        <s:hidden id="planId" name="planId"/>
        <s:hidden id="roleId" name="roleId"/>
        <input type="hidden" id="action" name="action"/>
        <input type="hidden" id="turnTitleId" name="turnTitleId"/>
        <input type="hidden" id="layoutInfo" name="layoutInfo"/>
        <input type="hidden" id="containerInfo" name="containerInfo"/>
        <div id="tab_switchdraw_x" class="tab_switchdraw_x">
            <ul>
            </ul>
            <ul style="float:left;position:absolute;right:20px;">
            <s:if test="areaId==null||planId==null||roleId==null">
                请在布局版本管理中添加布局!
            </s:if>
            <s:else>
                <li style="font-size: 14px;margin-right: 5px;">当前布局:<s:property value="areaName"/>&gt;<s:property value="planName"/>&gt;<s:property value="roleName"/></li>
                <li><input type="button" class="cssbutton" style="margin-top:0;" οnclick="changeLayout();" value="切换"/></li>
            </s:else>            
            </ul>
        </div>
        </form>
        <div class="layout">
            <ul id="newLayout" >
            </ul>
        </div>
        <div class="page_line">
            <input type="button" class="button" value="保存" οnclick="saveLayout()" title="保存布局到后台,不会同步数据给iepg">
            <input type="button" class="button" value="保存并发布" οnclick="saveLayoutAndPublish()" title="保存布局到后台,并同步数据给iepg">
            <input type="button" class="button" value="发布" οnclick="publishTitle()" title="直接从后台获取数据同步给iepg">
            <input type="button" class="button" value="清空" οnclick="resetLayout()" title="清空布局,仅页面生效,不会提交到后台">
        </div>
        <div id="tab_lay_x" class="tab_switchdraw_x">
            <ul></ul>
            <div class="search">
                <input type="text" id="searchName" οnkeypress="enterSearch()" placeholder="请输入资源名称">
                <input type="button" οnclick="search()" class="button" value="搜索">
            </div>
        </div>
        <div class="all_content">
            <ul id="content" >
            </ul>
        </div>
        <div class="page_line getmore">
            <input type="button" class="button" value="分批加载" οnclick="loadNextPage()" title="默认加载50个资源,点击按钮继续加载下50个,直至全部加载出来">
            <input type="button" class="button" value="全部加载" οnclick="loadAll()" title="一次性全部加载出来">
        </div>
        <div id='bg' class='bg'>
            <div class='dialogContent'>
                <div class='info_tit'>
                    <div class='left'>模块属性</div>
                    <p id='btn_closedialog' οnclick='hideDialog()'></p>
                </div>
                <div class='optTable'>
                    <table>
                        <tr>
                            <td>背景颜色</td>
                            <td id='color_'>
                                <input type='text' value='' id='colorValue'></input>
                                <input id="color_check" type="color" ></input>
                                <input id='colorType' type="checkbox" disabled></input>
                                <input value="#ababab" disabled id="defaultColor" type="text"></input>
                            </td>
                        </tr>
                        <tr>
                            <td>透明度</td>
                            <td><input id="color_op" min=0 max=100 type="number" ></input></td>
                        </tr>
                        <tr>
                            <td>是否支持缩放</td>
                            <td>
                                <input type='radio' name="scale" value="1"></input>是
                                <input type='radio' name="scale" value="0"></input>否
                            </td>
                        </tr>
                        <tr>
                            <td>是否支持拖动</td>
                            <td>
                                <input type='radio' name="drage" value="1"></input>是
                                <input type='radio' name="drage" value="0"></input>否
                            </td>
                        </tr>
                        <tr>
                            <td>是否支持删除</td>
                            <td>
                                <input type='radio' name="delete" value="1"></input>是
                                <input type='radio' name="delete" value="0"></input>否
                            </td>
                        </tr>
                        <tr>
                            <td>是否支持获焦</td>
                            <td>
                                <input type='radio' name="focus" value="1"></input>是
                                <input type='radio' name="focus" value="0"></input>否
                            </td>
                        </tr>
                        <tr>
                            <td>是否支持点击</td>
                            <td>
                                <input type='radio' name="click" value="1"></input>是
                                <input type='radio' name="click" value="0"></input>否
                            </td>
                        </tr>
                        <tr>
                            <td>是否显示名称</td>
                            <td>
                                <input type='radio' name="showname" value="1"></input>是
                                <input type='radio' name="showname" value="0"></input>否
                            </td>
                        </tr>
                        <tr>
                            <td>是否需要鉴权</td>
                            <td>
                                <input type='radio' name="isAuth" value="1"></input>是
                                <input type='radio' name="isAuth" value="0"></input>否
                            </td>
                        </tr>
                        <tr>
                            <td>支持最小版本号</td>
                            <td>
                                <input type='text' id="minSoftVer_op" name="minSoftVer" maxlength="10"  style="width:160px;"></input>
                            </td>
                        </tr>
                    </table>
                </div>
                <div class="page_line">
                    <input value="确定" class="button" type="button" οnclick="saveModuleOpt()"></input>
                    <input value="取消" class="button" type="button" οnclick="hideDialog()"></input>
                </div>
                <div class="imageView" id="imageView"></div>
            </div>
        </div>
    </body>
    <script>
        function changeLayout(){
            var url = 'changeLayout.do?areaId=<s:property value="areaId"/>&planId=<s:property value="planId"/>&roleId=<s:property value="roleId"/>';
            showPage('切换布局',url,600,220);
        }
        
        var a=new Date();
        if(!(navigator.userAgent.indexOf("WebKit")>0||navigator.userAgent.indexOf("webkit")>0||navigator.userAgent.indexOf("Chrome")>0)){
            alert("Sorry!!\n您的浏览器不支持html5拖拽事件,建议使用Chrome浏览器浏览此功能。");
        }
        /*
        后台提供数据
        lay                    :已布局数据
        sou                    :资源
        type                :资源分类
        cellDefaultColor    :默认背景颜色值
        */
        var lay=titleAndLayoutInfo = <s:property value="titleAndLayoutInfo" escape="false" default="null"/>;
        var sou=resourceCenter = <s:property value="resourceCenter" escape="false" default="null"/>;
        var type=resourceCenterType = <s:property value="resourceCenterType" escape="false" default="null"/>;
        var cellDefaultColor= '<s:property value="cellDefaultColor" escape="false" default=""/>';
        //切换页签前显示的下标
        var tagIndex=0;
        //正在修改参数的对象
        var actionOpt={};
        //每次加载五十条数据
        var amountOfPage=50;
        //模块模板
        var module="<div id='{id}' title='{description}'  draggable='true' class='m' style='left:{left}px;top:{top}px;width:{width}px;height:{height}px;background-color:{bgcolor}'><div murl='{url}' style='position:relative;width:100%;height:100%;top:0px;left:0px;'></div><span style='position:absolute;font-size:13px;line-height:15px;text-align:right;z-index:101;top:0px;'>{title}</span></div>";
        
        //var moveModule="<div class='rRightDown' '></div><div class='rLeftDown'></div><div class='rRightUp'></div><div class='rLeftUp'></div><div class='rRight'></div><div class='rLeft'></div><div class='rUp'></div><div class='rDown'></div>";
        var moveModule="<div class='rRightDown' '></div>";
        
        var zoomStartX=0,zoomStartY=0,zoomEndX=0,zoomEndY=0,zoom=false,zoomObj,widthBeforeZoom,heightBeforeZoom;
        function zoomMouseDown(e){
            zoom=true;
            e.preventDefault();
            zoomObj=jQuery(this).parent();
            var data=zoomObj.data("data");
            console.log(data.cellX,data.cellY);
            widthBeforeZoom=data.celX;
            heightBeforeZoom=data.celY;
            console.log(data);
            zoomObj.attr("draggable",false);
            zoomEndX=zoomStartX=e.pageX;
            zoomEndY=zoomStartY=e.pageY;
        }
        function zoomMouseMove(e){
            if(!zoom)
                return;
            e.preventDefault();
            var w=zoomObj.width();
            var h=zoomObj.height();
            var mx=e.pageX;
            var mh=e.pageY;
            var data=zoomObj.data("data");
            var orginX=Math.round((data.ofsX-5)/40);
            var orginY=Math.round((data.ofsY-5)/40);
            
            var ownid=data.id;
            
            var new_w=w+mx-zoomEndX;
            var new_h=h+mh-zoomEndY;
            cellX=new_w<30?orginX:Math.floor((new_w+10)/40);
            cellY=new_h<30?orginY:Math.floor((new_h+10)/40);
            
            if(new_w<30)
                zoomObj.width(30);
            else if(zoomCheckCellY(orginX,orginY,orginX+cellX,orginY+cellY,ownid)){
                zoomObj.width(new_w);
            }
            if(new_h<30)
                zoomObj.height(30);
            else if(zoomCheckCellX(orginX,orginY,orginX+cellX,orginY+cellY,ownid)){
                zoomObj.height(new_h);
            }
            zoomEndY=mh;
            zoomEndX=mx;
        }
        function zoomCheckCellY(originX,originY,cellX,cellY,ownid){
            var x=cellX-originX;
            if(x<0)
                return true;
            for(var j=originX;j<cellX;j++){
                for(var i=originY;i<cellY;i++){
                    var obj=jQuery("#newLayout>li:eq("+(j+1)+")>div:eq("+i+")");
                    if(obj.attr("ownid")!=ownid&&!obj.attr("fill")){
                        return false;
                    }
                }
            }
            return true;
        }
        function zoomCheckCellX(originX,originY,cellX,cellY,ownid){
            var y=cellY-originY;
            if(y<0)
                return true;
            for(var j=originY;j<cellY;j++){
                for(var i=originX;i<cellX;i++){
                    var obj=jQuery("#newLayout>li:eq("+i+")>div:eq("+(j+1)+")");
                    if(obj.attr("ownid")!=ownid&&!obj.attr("fill")){
                        return false;
                    }
                }
            }
            return true;
        }
        function zoomMouseEnd(e){
            if(!zoom){
                return;
            }
            var w=zoomObj.width();
            var h=zoomObj.height();
            var w=Math.round((w+10)/40);
            var h=Math.round((h+10)/40);
            var data=zoomObj.data("data");
            var orginX=Math.round((data.ofsX-5)/40);
            var orginY=Math.round((data.ofsY-5)/40);
            zoomObj.width(w*40-10);
            zoomObj.height(h*40-10);
            console.log(orginX,orginY,widthBeforeZoom,heightBeforeZoom);
            refreshArea(orginX,orginY,widthBeforeZoom,heightBeforeZoom,"newLayout");
            setArea(orginX,orginY,data.celX=w,data.celY=h,data.id);
            data.newMove=1;
            zoom=false;
            zoomObj.attr("draggable",true);
            isEdit=true;
        }
        function setZoomEvent(obj){
            obj.addEventListener("mousedown",zoomMouseDown,false);
            document.addEventListener("mousemove",zoomMouseMove,false);
            document.addEventListener("mouseup",zoomMouseEnd,false);
        }
        /*
        layout    :已布局的画板参数 .x 列表;.y 行
        content    :资源的画板参数 .x 列表;.y 行
        dragId    :正在拖拽模板ID
        submitId:提交数据对应的页签ID
        */
        var layout={x:100,y:7},content={x:50,y:8},dragId,submitId=1,isEdit=false;
        
        (function (){
            //取出后台提供的角色ID,默认不提供
            var roleId = jQuery("#roleId").val();
            //在后台不提供的情况下,默认为1;
            roleId=!!roleId?roleId.trim():"1";
            //选择当前角色
            //jQuery("input[type='radio'][value='"+roleId+"']")[0].checked=true;
            //生成布局格子
            buildMContent(layout,"newLayout");
            buildMContent(content,"content");
            //每个角色下会有多个首页标签,setTitle会生成页签,并生在content中生成已布局模块;
            setTitle();
            //资源模块排板
            //setM(sou);
            var b=new Date();
            //alert("T_T模块太多,算法不给力了,生成页面时间:"+(b.getTime()-a.getTime())+"毫秒");
            var dialog = $( "#showSuccessDialog" ).val();
            if ( dialog == '1' ) {
                alert("操作成功");
            }
        })();
        //添加页签
        function setTitle(){
            if(!lay){
                jQuery("#tab_switchdraw_x ul:first-child").append("<li>请在首页标签管理给标签关联角色!</li>");
                return;
            }
            //默认页签ID
            var titleId = jQuery("#titleId").val();
            var index;
            //生成角色下的所有标签
            for(var i=0;i<lay.length;i++){
                //所要显示数据页签的下标
                if(lay[i].id==titleId)
                    tagIndex=index=i;
                jQuery("#tab_switchdraw_x ul:first-child").append("<li><a href='#' οnclick='turnPage("+i+",\""+lay[i].id+"\")'>"+lay[i].name+"</a></li>");
            }
            if(!index){
                index=0;
                titleId=lay[0].id;
            }
            //生成资源分类标签
            for(var i=0;i<type.length;i++){
                jQuery("#tab_lay_x ul").append("<li><a href='#' οnclick='filterModule("+i+",\""+type[i].keyCode+"\")'>"+type[i].keyValue+"</a></li>");
            }
            jQuery("#tab_lay_x ul").append("<li><a href='#' οnclick='filterModule(-1)'>全部</a></li>");
            //生成某一页签下已保存的布局
            setLayout(index,titleId);
            //显示资源第一个分类
            jQuery("#tab_lay_x>ul>li:first-child>a").click();
        }
        //点击页签
        function turnPage(index,id){
            if(isEdit){
                if(!confirm("布局或模块属性有修改,是否要保存?")){
                    var areaId = jQuery("#areaId").val();
                    var planId = jQuery("#planId").val();
                    var roleId = jQuery("#roleId").val();
                    window.location="/portalMS/titleManage/queryTitleAndLayoutInfoIList.do?titleId="+id+"&roleId="+roleId+"&areaId="+areaId+"&planId="+planId;
                }else{
                    jQuery("#action").val('turnPage');
                    jQuery("#turnTitleId").val(id);
                    saveLayout();
                }
            }else{
                var areaId = jQuery("#areaId").val();
                var planId = jQuery("#planId").val();
                var roleId = jQuery("#roleId").val();
                window.location="/portalMS/titleManage/queryTitleAndLayoutInfoIList.do?titleId="+id+"&roleId="+roleId+"&areaId="+areaId+"&planId="+planId;
            }
        }
        //添加已保存的布局 index标签下标 id标签id
        function setLayout(index,id){
            //刷新刷局格子
            refreshAll(".layout");
            //数据
            var datas=lay[index].titleLayoutList;
            //页签id=submitId提交时要用的参数
            submitId=id;
            //给页签添加选中样式
            tagFocus(index);
            //遍历数据 生成html
            for(var i=0;i<datas.length;i++){
                var d=datas[i];
                //海报地址
                var url=d.posterServerHttp+d.localPath;
                var bgColor=d.cellColor||cellDefaultColor;
                bgColor=getRgbaColor(bgColor,d.cellAlpha);
                //生成html串
                var html=module.replace("{id}",d.categoryResourceId)
                               .replace("{left}",40*d.cellX+5)
                               .replace("{top}",40*d.cellY+5)
                               .replace("{width}",40*d.spanX-10)
                               .replace("{height}",40*d.spanY-10)
                               .replace("{bgcolor}",bgColor)
                               .replace("{title}",d.resourceName)
                               .replace("{description}",d.description)
                               .replace("{url}",url);
                //存在到html模板里的数据
                var moveObj={
                    id:d.categoryResourceId,//模块ID
                    myId:d.id,//cell id
                    newMove:"0",//是否移动过
                    x:0,//x坐标
                    y:0,//y坐标
                    celX:d.spanX,//x轴占用格子数
                    celY:d.spanY,//y轴占用格子数
                    ofsX:(40*d.cellX+5),//模板在页面的x轴偏移
                    ofsY:(40*d.cellY+5),//模板在页面的y轴偏移
                    overlay:true,//是否叠加
                    overMove:false,//是否移动
                    localPath:d.localPath,//图片服务器上的相对地址
                    posterServerHttp:d.posterServerHttp,//服务地址加端口
                    container:"newLayout",//所在布局的html id
                    cellState:d.cellState,//模板状态
                    cellColor:d.cellColor,//背景颜色
                    cellAlpha:d.cellAlpha,//透明度
                    posterList:d.posterList,//多张海报的参数(缩放使用到)
                    isAuth:d.isAuth,
                    minSoftVer:d.minSoftVer
                };
                //找到模块起点坐标的格子
                var poit=jQuery("#newLayout>li:eq("+d.cellX+")>div:eq("+d.cellY+")");
                //ownid格子所属模块id 所果格子未被占用所为undefined
                var ownid=poit.attr("ownid");
                //叠加时样式修正
                var df_style={"top":"-1px","left":"-1px"};
                //如果格子未被占(ownid==undefined)用则正常添加模板,如果已被占用则叠加
                if(!!ownid){
                    //取出模块父层
                    var parent=jQuery("#"+ownid).parent("div[ownid='"+ownid+"'][class='wrap']");
                    //如果已经添加有模块,则会有一个div[class='wrap']包裹所有模块
                    if(!!parent&&parent.length>0){//已有叠加,直接添加到div[class='wrap']里面
                        var obj=jQuery(html);
                        //直接添加到父层里
                        parent.append(obj.css(df_style).data("data",moveObj));
                        //添加多模块切换显示
                        setpage(parent);
                    }else{//如果还没有叠加,则先包裹到div[class='wrap']再叠加
                        //生成父层且添加样式
                        var wrap_m="<div class='wrap' ownid='"+ownid+"'></div>";
                        var ownObj=jQuery("#"+ownid);
                        deleteZoom(ownObj);
                        var style={"top":ownObj.css("top"),"left":ownObj.css("left"),"width":ownObj.width(),"height":ownObj.height()};
                        //添加到容器,且添加样式
                        var wrapObj=jQuery(wrap_m).css(style);
                        jQuery(".layout").append(wrapObj);
                        //包裹原来的模块,且修改正样式
                        wrapObj.append(ownObj.css(df_style));
                        //把新模块添加到div[class='wrap']里面,且添加样式
                        var obj=jQuery(html);
                        wrapObj.append(obj.css(df_style).data("data",moveObj));
                        //把原来的模块删除掉
                        jQuery(".layout>#"+ownid).remove();
                        //添加多模块切换显示
                        setpage(wrapObj);
                    }
                }else{
                    //直接添加到容器里
                    jQuery(".layout").append(jQuery(html).data("data",moveObj).append(moveModule));
                    //标记格子已被占用
                    setArea(d.cellX,d.cellY,d.spanX,d.spanY,d.categoryResourceId);
                }
            }
            //给模块事件
            jQuery(".m").each(function (i){
                //给模块添加双击事件,提供参数的修改页面
                jQuery(this).dblclick(function(){
                    var data=jQuery(this).data("data");
                    //显示参数修改页面
                    showModuleOpt(data);
                });
                //给模块添加拖拽事件
                this.addEventListener("dragstart",drag,false);
                this.addEventListener("dragend",dragend,false);
            });
            
            var zooms=document.getElementsByClassName("rRightDown");
            for(var i=0;i<zooms.length;i++){
                setZoomEvent(zooms[i]);
            }
        }
        function submitCheck(){
            var minSoftVer=jQuery("#minSoftVer_op").val();
            var reg1 =  /^\d+$/;
            if(minSoftVer){
                if(minSoftVer.match(reg1) == null){
                    alert("版本号必须是正整数");
                    return false;
                }
            }
            
            return true;
        }
        //保存布局
        function saveLayout(){
            //当前页面ID添加到表单元素里
            jQuery("#titleId").val(submitId);
            var str="";
            //最后显示的页面,也就是要保存的页签布局数据(点击保存时只保存当前页签下的布局)
            var l=lastShowLayout=jQuery(".layout div[class='m']");
            for(var i=0;i<l.length;i++){
                var inTheContainer=0;
                var o=jQuery(l[i]).data("data");
                if(jQuery(l[i]).parent().attr("class")=="wrap"){
                    inTheContainer=1;
                }
                var cellX=Math.round((o.ofsX-5)/40);
                var cellY=Math.round((o.ofsY-5)/40);
                //后台要用的数据串
                if(o.minSoftVer==""){
                    o.minSoftVer=" ";
                }
                str+=o.myId+","+submitId+","+o.id+","+cellX+","+cellY+","+o.celX+","+o.celY+","+o.cellState+","+o.cellColor+","+o.cellAlpha+","+inTheContainer+","+o.newMove+","+o.isAuth+","+o.minSoftVer+";";
            }
            console.log(str);
            str=str.substring(0,str.lastIndexOf(";"));
            //把数据串添加到表单元素里
            jQuery("#layoutInfo").val(str);
            str="";
            //文件夹(所有的叠加模块的父层)
            var container=jQuery(".layout>div[class='wrap']");
            for(var i=0;i<container.length;i++){
                var o=jQuery(container[i]).children().eq(0).data("data");
                var cellX=Math.round((o.ofsX-5)/40);
                var cellY=Math.round((o.ofsY-5)/40);
                //后台要用的数据串
                str+=submitId+",,"+cellX+","+cellY+","+o.celX+","+o.celY+",,,,0;";
            }
            console.log(str);
            str=str.substring(0,str.lastIndexOf(";"));
            //把数据串添加到表单元素里
            jQuery("#containerInfo").val(str);
            //表单提交
            document.forms["saveForm"].submit();
        }
        // 发布
        function publishTitle(){
            var url="<%=contextPath%>/titleManage/publishTitle.do?titleId="+submitId;
            $.ajax({
                type: "POST",
                url: url,
                success: function(data){
                    if(data.trim()=="success"){
                        alert("操作成功");
                    }else{
                        alert("操作失败");
                    }
                }
            });
        }
        // 保存并发布
        function saveLayoutAndPublish(){
            jQuery("#action").val('saveAndPublish');
            saveLayout();
        }
        // 重置
        function resetLayout(){
            if(confirm("确定要重新布局吗?")){
                jQuery(".layout div.m").each(function(){
                    dragId=this.id;
                    content_obj.ondrop();
                });
                jQuery(".layout>div.wrap").each(function(){
                    jQuery(this).remove();
                });
            }
        }
        //生成布局格子opt数据,target格子生成所在容器id
        function buildMContent(opt,target){
            var html="";
            var x=opt.x;
            var y=opt.y;
            for(var i=0;i<x;i++){
                html+="<li>";
                for(var j=0;j<y;j++){
                    html+="<div fill='true'></div>";
                }
                html+="</li>";
            }
            var num=jQuery("#"+target+">li").length;
            jQuery("#"+target).append(html).width((num+x)*40).height(40*y+5);
        }
        //生成资源模板
        function setM(data){
            if(!data)
                return;
            var datas=data;
            for(var i=0;i<datas.length;i++){
                var d=datas[i];
                var url=d.posterServerHttp+d.localPath;
                //没有海报/宽高为0的模块直接不显示
                if(d.localPath==""&&d.width==0&&d.height==0){
                    continue;
                }
                var celw=Math.round((d.width+10)/75);
                var celh=Math.round((d.height+10)/75);
                if(celh>6){
                    celw=Math.round(celw*7/celh);
                    celh=7;
                }
                setImg(d.categoryResourceId,celw,celh,i,d.posterServerHttp,d.localPath,d.posterList,d.resourceName,d.description);
            }
            //绑定拖拖拽事件
            jQuery(".m").each(function (i){
                this.addEventListener("dragstart",drag,false);
                this.addEventListener("dragend",dragend,false);
            });
            setTimeout(function(){loadImg()},100);
        }
        //资源布局算法
        function setImg(id,celX,celY,m,host,local,posterList,resourceName,description){
            //取出所有空置的单元格
            //if(celY>6)
                //return;
            var mDiv=jQuery("#content div[fill='true']");
            var length=mDiv.length;
            var totalLi=jQuery("#content>li").length;
            for(var i=0;i<length;i++){
                var m=mDiv[i];
                var thisObj=jQuery(m);
                var index=thisObj.index();
                var thisParent=thisObj.parent();
                var liIndex=thisParent.index();
                if(index==-1&&liIndex==-1){
                    return;
                }
                //位置不够
                if(totalLi-liIndex<celX||i==(length-1)){
                    addCell();
                    mDiv=jQuery("#content div[fill='true']");
                    length=mDiv.length;
                    totalLi=jQuery("#content>li").length;
                }
                //列格子的位置不够
                if(content.y-index<celY){
                    continue;
                }
                //如果起点格子没有被占用,check此格子能否放下此模块
                if(check_xy(liIndex,index,celX,celY)){
                    //生成html串
                    var html=module.replace("{id}",id)
                                   .replace("{left}",40*liIndex+5)
                                   .replace("{top}",40*index+5)
                                   .replace("{width}",40*celX-10)
                                   .replace("{height}",40*celY-10)
                                   .replace("{bgcolor}",cellDefaultColor)
                                   .replace("{title}",resourceName)
                                   .replace("{description}",description)
                                   .replace("{url}",host+local);
                    //给html串添加的数据
                    var moveObj={
                        id:id,
                        myId:"",
                        newMove:"0",//是否移动过
                        x:liIndex,
                        y:index,
                        celX:celX,
                        celY:celY,
                        ofsX:40*liIndex+5,
                        ofsY:40*index+5,
                        overlay:true,
                        overMove:false,
                        localPath:local,
                        posterServerHttp:host,
                        container:"content",
                        cellState:'24',
                        cellColor:"",
                        cellAlpha:"100",
                        posterList:posterList,
                        isAuth:0,
                        minSoftVer:""
                    };
                    
                    //添加到容器里
                    jQuery(".all_content").append(jQuery(html).data("data",moveObj));
                    return;
                }
            }
        }
        //check格子能否放下模块
        function check_xy(x,y,celX,celY){
            var a=[];
            for(var i=0;i<celX;i++){//i为列
                for(var j=0;j<celY;j++){//j为行
                    if(!checkTheCell(x+i,y+j)){
                        return false;
                    }
                    var o={"x":x+i,"y":y+j};
                    a.push(o);
                }
            }
            setEmpty(a);
            return true;
        }
        //置空
        function setEmpty(a){
            if(!a.length)
                return;
            var l=a.length;
            for(var i=0;i<l;i++){
                jQuery("#content>li:eq("+a[i].x+")>div:eq("+a[i].y+")").removeAttr("fill");
            }
        }
        //页签焦点
        function tagFocus(index){
            jQuery(".tab_switchdraw_x>ul>li:eq("+index+")>a").attr("id","this_datact").parent().siblings().find("a").removeAttr("id");
        }
        //资源页签焦点
        function ModuleFocus(index){
            if(index==-1)
                jQuery("#tab_lay_x>ul>li:last-child>a").attr("id","this_datact").parent().siblings().find("a").removeAttr("id");
            else
                jQuery("#tab_lay_x>ul>li:eq("+index+")>a").attr("id","this_datact").parent().siblings().find("a").removeAttr("id");
        }
        //清空布局
        function refreshAll(target){
            jQuery(target+">div").remove();
            jQuery(target+">ul>li>div").attr("fill","true").removeAttr("celX").removeAttr("celY").removeAttr("ownId");
        }
        //还原过度标记
        function reChangeAttr(){
            jQuery("#content div[fill='false']").attr("fill","true");
        }
        //标记单无格已被占用
        function removeFillFalse(){
            jQuery("#content div[fill='false']").removeAttr("fill");
        }
        //过度标记
        function changeAttr(x,y){
            jQuery("#content>li:eq("+x+")>div:eq("+y+")").attr("fill","false");
        }
        //检测单元格是否被占用
        function checkTheCell(x,y){
            return jQuery("#content>li:eq("+x+")>div:eq("+y+")").attr("fill")?true:false;
        }
        //块拖放到一个区域后,标记块对应下的单元格
        function fillCell(x,y,ownId){
            jQuery("#newLayout>li:eq("+x+")>div:eq("+y+")").removeAttr("fill").attr("ownId",ownId);
        }
        //块拖放到一个区域后,原点单元格添加对应块所占用单元格长度
        function setCellArea(x,y,celX,celY){
            jQuery("#newLayout>li:eq("+x+")>div:eq("+y+")").attr("celX",celX).attr("celY",celY);
        }
        //删除缩放格子
        function deleteZoom(obj){
            jQuery(".rRightDown,.rLeftDown,.rRightUp,.rLeftUp,.rRight,.rLeft,.rUp,.rDown",obj).remove();
        }
        //块拖放到一个区域后,原点单元格添加对应块所占用单元格长度
        function setArea(x,y,w,h,id){
            for(var i=0;i<w;i++){
                for(var j=0;j<h;j++){
                    if(i==0&&j==0)
                        setCellArea(i+x,j+y,w,h);
                    fillCell(i+x,j+y,id);
                }
            }
        }
        //块拖走后清空原来块占用单元格的所有标记
        function reArea(x,y,targetId){
            var div=jQuery("#"+targetId+">li:eq("+x+")>div:eq("+y+")");
            div.attr("fill","true").removeAttr("celX").removeAttr("celY").removeAttr("ownId");
        }
        //块拖走后清空原来块占用单元格的所有标记
        function refreshArea(x,y,spanX,spanY,container){
            for(var i=0;i<spanX;i++){
                for(var j=0;j<spanY;j++){
                    reArea(i+x,j+y,container);
                }
            }
        }
        //检测单元格是否为原来块所占用的。
        function checkCell(x,y,id,ownId){
            var obj=jQuery("#"+id+">li:eq("+x+")>div:eq("+y+")");
            return obj.attr("ownId")==ownId||obj.attr("fill")?true:false;
        }
        //返回单元格占用div id
        function getOwnId(x,y,targetId){
            return jQuery("#"+targetId+">li:eq("+x+")>div:eq("+y+")").attr("ownid");
        }
        //检测块拖拽到的区域能否容纳块
        function checkArea(x,y,targetid,ownId){
            var ownObj=jQuery("#"+ownId);
            var parentClass=ownObj.parent(".wrap");
            console.log();
            var data=ownObj.data("data");
            for(var i=0;i<data.celX;i++){
                for(var j=0;j<data.celY;j++){
                    var obj=jQuery("#"+targetid+">li:eq("+(x+i)+")>div:eq("+(y+j)+")");
                    var _celX=obj.attr("celX");
                    var _celY=obj.attr("celY");
                    if(obj.attr("ownId")!=ownId&&_celX==data.celX&&_celY==data.celY&&i==0&&j==0){
                        //能容纳但不覆盖格子,也就是要叠加
                        console.log("T_T");
                        data.overlay=false;
                        return true;
                    }else if(!(obj.attr("ownId")==ownId||!!obj.attr("fill"))){
                        data.overlay=true;
                        return false;
                    }else if(parentClass.length>0&&obj.attr("ownId")==ownId&&!obj.attr("fill")){
                        data.overlay=true;
                        return false;
                    }
                }
            }
            data.overlay=true;
            //能容纳且覆盖格子
            return true;
        }
        //拖拽开始
        var beforeMoveOwnId;
        function drag(e){
            //e.dataTransfer.setData("Text",this.id);
            //服务器上/e.dataTransfer.setData存储不了数据,不知道为什么,所以用全部变量代替
            //当前拖拽的模块id
            dragId=this.id;
            var data=jQuery(this).data("data");
            //*1  字符转数字
            //layerX,layerY模块在页面的偏移量
            data.x=e.layerX*1;
            data.y=e.layerY*1;
            //x列 y行
            var x=Math.round(data.ofsX/40);
            var y=Math.round((data.ofsY-5)/40);
            //container 模块当前所在窗口的id newLayout:动态布局区域 content:资源区域
            if(data.container=="newLayout"){
                //如果是newLayout,移动的时候要判断叠加的情况
                //取出模块占用的格子,查看格子所属id(ownId)是否和自己的id匹配
                var obj=jQuery("#newLayout>li:eq("+x+")>div:eq("+y+")");
                var id=obj?obj.attr("ownId"):false;
                beforeMoveOwnId=id;
                //如果不匹配,移动后,原来占用的格子不用重置;反则重置
                if(id&&this.id!=id){
                    data.overMove=true;
                }else{
                    data.overMove=false;
                }
            }
        }
        //拖拽结束
        function dragend(e){
            //console.log(e.dataTransfer.getData("Text"));
        }
        //拖到目标上时判断是否能落在目标区域上
        var layout_obj=document.getElementsByClassName("layout")[0];
        var layout_j=jQuery(layout_obj).offset();
        layout_obj.οndragοver= function(e) {
            //var id=e.dataTransfer.getData("Text");
            var id=dragId;
            var obj=jQuery("#"+id);
            var data=obj.data("data");
            var _x=e.pageX-layout_j.left-data.x+this.scrollLeft;
            var _y=e.pageY-layout_j.top-data.y-5+this.scrollTop;
            var x=Math.round(_x/40);
            var y=Math.round(_y/40);
            if(_x>=-5&&_y>=-5&&checkArea(x,y,'newLayout',id)){
                e.preventDefault();
                return true;
            }
        }
        //拖拽结束后目标落入布局区域
        layout_obj.οndrοp=function (e){
            //var id=e.dataTransfer.getData("Text");
            //服务器上/e.dataTransfer.setData存储不了数据,不知道为什么,所以用全部变量代替
            //当前拖拽的模块id
            var id=dragId;
            var obj=jQuery("#"+id);
            //拖进布局区域后添加双击事件
            obj.dblclick(function(){
                var data=jQuery(this).data("data");
                showModuleOpt(data);
            })
            //取出模板里存储的数据
            var data=obj.data("data");
            console.log(data.overlay);
            data.newMove="1";
            isEdit=true;
            //添加进布局区
            jQuery(this).append(obj);
            //重置单元区域
            if(data.container=='newLayout'&&!data.overMove){
                var parent=jQuery("div[ownid='"+id+"'][class='wrap']");
                //判断是否是叠加
                //如果是叠加parent.length>0
                if(parent[0]&&parent.length>0){
                    //添加的话取出第一个包裹节点,把格子给第一个模块占用
                    var nextDiv=parent.find("div").eq(0);
                    //取出数据
                    var n=nextDivData=nextDiv.data("data");
                    //计算出liIndex 列;divIndex行
                    var liIndex=Math.round(n.ofsX/40);
                    var divIndex=Math.round((n.ofsY-5)/40);
                    //标记区域为此模块占用
                    setArea(liIndex,divIndex,n.celX,n.celY,n.id);
                    parent.attr("ownid",n.id);
                    //重置文件夹
                    setpage(parent);
                }else{
                    //liIndex例 divIndex行
                    var liIndex=Math.round(data.ofsX/40);
                    var divIndex=Math.round((data.ofsY-5)/40);
                    //重置占用格子
                    refreshArea(liIndex,divIndex,data.celX,data.celY,'newLayout');
                }
            }else if(data.container=='newLayout'&&data.overMove){
                //如果拖拽的不是文件夹里点用格子的模块,直接重置文件夹,不用重置格子
                setpage(jQuery(".layout>div[ownid='"+beforeMoveOwnId+"'][class='wrap']"));
            }else if(data.container=='content'){
                //如果拖拽的不是文件夹,直接重置格式
                var liIndex=Math.round(data.ofsX/40);
                var divIndex=Math.round((data.ofsY-5)/40);
                //重置占用格子
                refreshArea(liIndex,divIndex,data.celX,data.celY,'content');
            }
            //修改模块容器
            data.container='newLayout';
            //计算模块模块所以容器偏移量
            var x=e.pageX-layout_j.left-data.x+this.scrollLeft;
            var y=e.pageY-layout_j.top-data.y+this.scrollTop;
            //通过偏移量计算出周边格子(让模块自动落入格子上,有一种自动吸附的效果)
            x=x<0?0:x;
            y=y<0?0:y;
            x=x>(layout.x-data.celX)*40?(layout.x-data.celX)*40:x;
            y=y>(layout.y-data.celY)*40+5?(layout.y-data.celY)*40+5:y;
            x=Math.round(x/40)*40+5;
            y=Math.round((y-5)/40)*40+5;
            obj.css({"left":x+"px","top":y+"px"});
            data.ofsX=x;
            data.ofsY=y;
            var liIndex=Math.round(x/40);
            var divIndex=Math.round((y-5)/40);
            if(data.overlay){
                //落入的格子没有叠加,直接标记格子,占为自有
                setArea(liIndex,divIndex,data.celX,data.celY,data.id);
                var tag=jQuery(".rRightDown",obj);
                if(tag.length==0){
                    obj.append(moveModule);
                    tag=jQuery(".rRightDown",obj);
                    setZoomEvent(tag[0]);
                }
            }else{
                //落入格子已被占用
                
                //ownid找出格子目前被谁占用
                var ownid=getOwnId(Math.round((x-5)/40),Math.round((y-5)/40),'newLayout');
                //找出格子占用对象
                var ownObj=jQuery("#"+ownid);
                //判断是否已有文件夹
                if(ownObj.parent().attr("ownid")==ownid){
                    //如果已存在文件夹,直接添加
                    //添加到文件夹,且修正样式
                    deleteZoom(obj);
                    ownObj.parent().append(obj.css({"top":"-1px","left":"-1px"}));
                    //把原来的模块删除
                    jQuery(".layout>#"+id).remove();
                    //重置文件夹
                    setpage(ownObj.parent());
                }else{
                    //如果还没有文件夹则添加文件夹
                    var html="<div class='wrap' ownid='"+ownid+"'></div>";
                    var wrapObj=jQuery(html).css({"top":ownObj.css("top"),"left":ownObj.css("left"),"width":ownObj.width(),"height":ownObj.height()});
                    jQuery(this).append(wrapObj);
                    wrapObj.append(ownObj.css({"top":"-1px","left":"-1px"}));
                    wrapObj.append(obj.css({"top":"-1px","left":"-1px"}));
                    deleteZoom(obj);
                    deleteZoom(ownObj);
                    //jQuery(".layout>#"+ownid).remove();
                    //jQuery(".layout>#"+id).remove();
                    setpage(wrapObj);
                }
            }
            data.overlay=true;
        }
        //重置文件夹
        function setpage(obj){
            //把pagelist删除掉,也就是显示12345那个列表,后面会重新生成
            jQuery(".pagelist",obj).remove();
            //把子div全部查找出来(每一个div都是一个模块)
            var divs=obj.find(">div");
            var ownid=obj.attr("ownid");
            var html="";
            //divs.length==0刚把文件夹去除(只行剩下一个模块,没必要用文件夹了)
            if(divs.length>1){
                //添加显示的页数和事件
                jQuery(divs).each(function(i){
                    html+="<li οnclick='showpages("+i+","+ownid+")'>"+(i+1)+"</li>";
                })
                html="<ul class='pagelist' >"+html+"</ul>";
                obj.append(html);
                showpages(divs.length-1,ownid);
            }else if(divs.length==1){
                //只剩下一个模块了,把文件夹去掉只剩下模块
                var own=jQuery("#"+ownid);
                own.unwrap();
                own.append(moveModule);
                tag=jQuery(".rRightDown",own);
                setZoomEvent(tag[0]);
                var data=own.data("data");
                //重置样式
                own.css({"top":data.ofsY+"px","left":data.ofsX+"px"});
            }
        }
        //点击文件夹上的列表数字,显示对应的模块
        function showpages(index,ownid){
            jQuery(".layout>div[ownid='"+ownid+"']>ul>li:eq("+index+")").addClass("foc").siblings().removeClass("foc");
            jQuery(".layout>div[ownid='"+ownid+"']").find(">div:eq("+index+")").css("z-index",100).siblings("div").css("z-index",1)
        }
        //拖到目标上时判断是否能落在目标区域上
        var content_obj=document.getElementsByClassName("all_content")[0];
        content_obj.οndragοver= function(e) {
            //var id=e.dataTransfer.getData("Text");
            var id=dragId;
            var obj=jQuery("#"+id);
            var data=obj.data("data");
            if(data.container=="newLayout"){
                e.preventDefault();
                return true;
            }
        }
        //这里是从布局区域拖拽到资源区域,也就是删除操作,思路和添加点不多,不过逻辑没那么多
        content_obj.οndrοp=function (e){
            //var id=e.dataTransfer.getData("Text");
            var id=dragId;
            var obj=jQuery("#"+id);
            var moveObjData=findTheRemoveObj(id);
            //把删除的模块数据添加到资源数据中
            if(!!moveObjData&&jQuery.inArray(moveObjData,sou)==-1){
                sou.push(moveObjData);
            }
            //资源模块数据没有双击事件
            obj.unbind("dblclick");
            var data=obj.data("data");
            var container_bak=data.container;
            var liIndex=Math.round(data.ofsX/40);
            var divIndex=Math.round((data.ofsY-5)/40);
            jQuery(this).append(obj);
            deleteZoom(obj);
            //删除时也要重置文件夹
            if(beforeMoveOwnId&&data.container=='newLayout'&&data.overMove){
                setpage(jQuery(".layout>div[ownid='"+beforeMoveOwnId+"']"));
            }else if(beforeMoveOwnId&&data.container=='newLayout'&&!data.overMove){
                var parent=jQuery("div[ownid='"+id+"'][class='wrap']");
                if(parent.length>0){
                    var nextDiv=parent.find("div").eq(0);
                    var n=nextDivData=nextDiv.data("data");
                    var liIndex=Math.round(n.ofsX/40);
                    var divIndex=Math.round((n.ofsY-5)/40);
                    setArea(liIndex,divIndex,n.celX,n.celY,n.id);
                    parent.attr("ownid",n.id);
                    setpage(parent);
                }else{
                    refreshArea(liIndex,divIndex,data.celX,data.celY,'newLayout');
                }
            }else{
                refreshArea(liIndex,divIndex,data.celX,data.celY,'newLayout');
            }
            var firstEmtypDiv=jQuery("#content div[fill='true']");
            var totalLi=jQuery("#content>li").length;
            for(var i=0;i<firstEmtypDiv.length;i++){
                var index=jQuery(firstEmtypDiv[i]).index();
                var liIndex=jQuery(firstEmtypDiv[i]).parent().index();
                if(totalLi-liIndex<data.celX||i==(firstEmtypDiv.length-1)){
                    addCell();
                    firstEmtypDiv=jQuery("#content div[fill='true']");
                    totalLi=jQuery("#content>li").length;
                }
                if(index==-1&&liIndex==-1){
                    return;
                }
                if(!checkTheCell(liIndex,index))
                    continue;
                if(check_xy(liIndex,index,data.celX,data.celY)){
                    obj.css({"top":(40*index+5)+'px',"left":(40*liIndex+5)+'px'});//x,y:鼠标对拖动目标的偏移量;celX,celY:模块长宽占用单位;ofsX,ofsY:模块所在位置偏移量;overlay:是否重叠;overMove:覆盖中移除;container:所在容器
                    var moveObj={
                        id:data.id,
                        myId:data.myId,
                        newMove:"1",//是否移动过
                        x:liIndex,
                        y:index,
                        celX:data.celX,
                        celY:data.celY,
                        ofsX:40*liIndex+5,
                        ofsY:40*index+5,
                        overlay:true,
                        overMove:false,
                        localPath:data.localPath,
                        posterServerHttp:data.posterServerHttp,
                        container:"content",
                        cellState:data.cellState,
                        cellColor:data.cellColor,
                        cellAlpha:data.cellAlpha,
                        posterList:data.posterList,
                        isAuth:data.isAuth,
                        minSoftVer:data.minSoftVer
                    };
                    isEdit=true;
                    jQuery(".all_content").append(obj.data("data",moveObj));
                    return;
                }
            }
        }
        //属性框
        function showModuleOpt(data){
            actionOpt=data;
            jQuery("#colorValue").val(data.cellColor);
            jQuery("#color_check").val(data.cellColor);
            jQuery("#color_op").val(data.cellAlpha);
            if(!!data.cellColor){
                jQuery("#colorType").removeAttr("disabled")[0].checked=false;
            }else{
                jQuery("#colorType").attr("disable","disable")[0].checked=true;
            }
            jQuery("#defaultColor").val(cellDefaultColor);
            var num=checkNum(parseInt(data.cellState,10).toString(2));
            jQuery("input[name='scale'][value='"+getNum(5,num)+"']")[0].checked=true;
            jQuery("input[name='drage'][value='"+getNum(4,num)+"']")[0].checked=true;
            jQuery("input[name='delete'][value='"+getNum(3,num)+"']")[0].checked=true;
            jQuery("input[name='focus'][value='"+getNum(2,num)+"']")[0].checked=true;
            jQuery("input[name='click'][value='"+getNum(1,num)+"']")[0].checked=true;
            jQuery("input[name='showname'][value='"+getNum(0,num)+"']")[0].checked=true;
            jQuery("input[name='isAuth'][value='"+data.isAuth+"']")[0].checked=true;
            jQuery("#minSoftVer_op").val(data.minSoftVer);
            
            var pictures=data.posterList;
            jQuery("#imageView").empty();
            var img_url="<%=contextPath%>/titleManage/findPosterList.action?categoryResourceId="+data.id;
            jQuery.get(img_url,{},function(imgs){
                for(var i=0;i<imgs.length;i++){
                    var p=imgs[i];
                    var url=p.posterServerHttp+p.localPath;    
                    var _w=Math.round((p.width*1+10)/75);
                    var _h=Math.round((p.height*1+10)/75);        
                    var w=_w*40+5;
                    var h=_h*40+5;
                    var bgColor=data.cellColor||cellDefaultColor;
                    bgColor=getRgbaColor(bgColor,data.cellAlpha);
                    jQuery("#imageView").append("<div><div style='background-color:"+bgColor+"'><img οnclick='openUrl(\""+url+"\")' width='"+w+"px' height='"+h+"px' src='"+url+"'></img></div><span style='text-align:center;display:block;width:"+w+"px'>"+p.width+"*"+p.height+"</span></div>");
                }
            });
            jQuery("#bg").show();
        }
        //打开预览图片
        function openUrl(url){
            window.open(url);
        }
        //保存模块参数
        function saveModuleOpt(){
            if(!submitCheck()){
                return void(0);    
            }
            actionOpt.cellColor=jQuery("#colorValue").val();
            var color=actionOpt.cellColor||cellDefaultColor;
            color=getRgbaColor(color,jQuery("#color_op").val());
            jQuery("#"+actionOpt.id).css("background-color",color);
            actionOpt.cellAlpha=jQuery("#color_op").val();
            var scale=jQuery("input[name='scale']:checked").val();
            var drage=jQuery("input[name='drage']:checked").val();
            var del=jQuery("input[name='delete']:checked").val();
            var focus=jQuery("input[name='focus']:checked").val();
            var click=jQuery("input[name='click']:checked").val();
            var showname=jQuery("input[name='showname']:checked").val();
            var num=""+showname+click+focus+del+drage+scale;
            actionOpt.cellState=parseInt(num,2).toString(10);
            actionOpt.newMove="1";
            actionOpt.isAuth=jQuery("input[name='isAuth']:checked").val();
            actionOpt.minSoftVer=jQuery("#minSoftVer_op").val();
            isEdit=true;
            hideDialog();
        }
        //格式化状态数据100->00100;
        function checkNum(num){
            var n=["00000","0000","000","00","0"];
            num=n[num.length-1]?n[num.length-1]+num:num;
            return num;
        }
        //返回rgba色值
        function getRgbaColor(color,opacity){
            if(color.length<7)
                return;
            var one=transTheNum(color.substring(1,3),16,10);
            var two=transTheNum(color.substring(3,5),16,10);
            var three=transTheNum(color.substring(5,7),16,10);
            var opa=opacity*1/100;
            return "rgba("+one+","+two+","+three+","+opa+")";
        }
        
        //进制转换 num要转换的值 oldType值原类型 newType要转成的类型
        function transTheNum(num,oldType,newType){
            return parseInt(num,oldType).toString(newType);
        }
        //返回对应位数据值
        function getNum(index,num){
            return num.substring(index,index+1);
        }
        function hideDialog(){
            jQuery("#bg").hide()
        }
        //重新生成格子
        function reSetCell(){
            jQuery("#content").empty();
            jQuery("#content").siblings().remove();
            jQuery(".all_content").scrollLeft(0);
            buildMContent(content,"content");
        }
        //添加格子
        function addCell(){
            var opt={x:15,y:8}
            buildMContent(opt,"content");
        }
        
        //加载下一页数据
        function loadNextPage(){
            if(array_tag.length){
                var arr=array_tag.splice(0,amountOfPage);
                setM(arr);
                array_tag.length?addColor():removeColor();
            }
        }
        
        function removeColor(){
            jQuery(".getmore input").css("color","#928E8E");
        }
        
        function addColor(){
            jQuery(".getmore input").css("color","#006ec1");
        }
        
        //全部加载
        function loadAll(){
            if(array_tag.length){
                var arr=array_tag.splice(0,array_tag.length);
                setM(arr);
                array_tag.length?addColor():removeColor();
            }
        }
        
        //资源过滤
        function filterModule(index,type){
            //var a=new Date();
            reSetCell();
            ModuleFocus(index);
            var arr=[];
            for(var i=0;i<sou.length;i++){
                var id=sou[i].categoryResourceId;
                var o=jQuery(".layout #"+id);
                if(o.length==0){
                    if(!type){
                        arr.push(sou[i]);
                    }else if(sou[i].resourceType==type){
                        arr.push(sou[i]);
                    }
                }
            }
            array_tag=arr;
            loadNextPage();
        }
        //临时写的调色板
        function palette(target,defaultColor){
            var module="<div id='color'><table border=1 id='colorCheck'><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr></table><input type='text' value='' id='colorValue'></input></div>";
            jQuery(target).append(module);
            jQuery("#colorValue").val(defaultColor||"#00FFFF");
            var normal=['#FFFFFF','#000000','#00FF00','#00FFFF','#FF33FF','#FFFF00','#3366FF','#FFFF99','#CCCC66'];
            var td=jQuery('#color td');
            for(var i=0;i<normal.length;i++){
                td.eq(i).css('background-color',normal[i]).data('bgcolor',normal[i]).click(function(){
                    var value=jQuery(this).data('bgcolor');
                    jQuery('#colorValue').val(value);
                    return value;
                })
            }
        }
        //颜色选择
        jQuery("#color_check").bind("change",function(){
            jQuery("#colorValue").val(this.value);
            jQuery("#colorType").removeAttr("disabled")[0].checked=false;
            var color=this.value;
            color=getRgbaColor(color,jQuery("#color_op").val());
            jQuery("#imageView>div>div").css("background-color",color);
        });
        //填写颜色
        jQuery("#colorValue").bind("blur",function(){
            var exg=/\#[a-f0-9]{6}/;
            if(exg.test(this.value)){
                jQuery("#color_check").val(this.value);
                jQuery("#colorType").removeAttr("disabled")[0].checked=false;
                jQuery("#imageView>div>div").css("background-color",jQuery("#color_check").val());
            }else{
                this.value="";
                //alert("对不起,输入的颜色值格式不对!");
            }
        });
        //修改透明度
        jQuery("#color_op").bind("change",changeOpa);
        jQuery("#color_op").bind("input",changeOpa);
        function changeOpa(){
            var v=this.value*1;
            if(v>100)
                this.value=100;
            else if(v<0)
                this.value=0;
            var color=jQuery("#colorValue").val()||cellDefaultColor;
            var rbga=getRgbaColor(color,this.value);
            jQuery("#imageView>div>div").css("background-color",rbga);
        }
        //默认颜色选项
        jQuery("#colorType").bind("change",function(){
            if(this.checked){
                jQuery("#colorValue").val("");
                var color=getRgbaColor(cellDefaultColor,jQuery("#color_op").val());
                jQuery("#imageView>div>div").css("background-color",color);
            }else{
                jQuery("#colorValue").val(jQuery("#color_check").val());
                var color=getRgbaColor(jQuery("#color_check").val(),jQuery("#color_op").val());
                jQuery("#imageView>div>div").css("background-color",color);
            }
        });
        //查找删除的模块
        function findTheRemoveObj(id){
            var tagIndex=jQuery("#this_datact").parent().index();
            var data=lay[tagIndex].titleLayoutList;
            for(var i=0;i<data.length;i++){
                if(data[i].categoryResourceId==id){
                    data[i].width=data[i].spanX*75-10;
                    data[i].height=data[i].spanY*75-10;
                    return data[i];
                }
            }
        }
        
        //搜索
        function search(){
            var name=jQuery("#searchName").val();
            if(!name)
                return;
            jQuery("#tab_lay_x ul li a").removeAttr("id");
            reSetCell();
            var arr=[];
            for(var i=0,length=sou.length;i<length;i++){
                if(sou[i].resourceName.indexOf(name)>=0){
                    arr.push(sou[i]);
                }
            }
            console.log(arr.length);
            array_tag=arr;
            loadNextPage();
        }
        //回车搜索
        function enterSearch(){
            if (event.keyCode == 13){
                search();
            }
        }
        
        //延时加载图片
        function loadImg(){
            jQuery("div[murl]").each(function(){
                var _t=this;
                var img=new Image();
                img.src=jQuery(_t).attr("murl");
                jQuery(img).load(function(){
                    jQuery(_t).css({"background":"url("+this.src+")","-webkit-background-size":"100%"}).removeAttr("murl");
                });
                img.οnerrοr=function(){
                    jQuery(_t).removeAttr("murl");
                }
            });
            jQuery("img").each(function(i){
                this.addEventListener("dragstart",function(){e.preventDefault();},false);
            });
        }
    </script>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android开发中,我们可以使用触摸事件处理来实现图片拖拽、缩放和旋转操作。 首先,要实现拖拽功能,我们需要监听触摸事件,并在触摸事件的ACTION_MOVE中更新图片的位置。我们可以通过获取触摸点的坐标,然后根据图片的尺寸和移动的距离来计算新的位置,并将图片设置到新的位置上。 其次,要实现缩放功能,我们同样需要监听触摸事件。在触摸事件的ACTION_POINTER_DOWN和ACTION_MOVE中,我们可以获取到两个触摸点的坐标,并根据它们之间的距离来计算缩放比例。然后我们可以通过Matrix矩阵来设置图片的缩放比例,并将新的Matrix应用到图片上。 最后,实现旋转功能也需要监听触摸事件。在触摸事件的ACTION_POINTER_DOWN和ACTION_MOVE中,我们可以获取到两个触摸点的坐标,并根据它们之间的角度差来计算旋转的角度。同样,我们可以通过Matrix矩阵来设置图片的旋转角度,并将新的Matrix应用到图片上。 需要注意的是,为了能够拖拽、缩放和旋转图片,我们需要在布局文件中将图片包裹在一个可交互的控件中,如FrameLayout或ImageView。并且在Java代码中,我们需要实现View的触摸事件监听接口,并重写相应的方法来处理触摸事件。 - 以上所述是一种基本的实现方式,在实际开发中,还可以结合手势检测器(GestureDetector)等技术来简化操作和增加灵活性。同时,还要注意处理边界问题和多点触控的情况,以提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值