独创轻松实现拖拽,改变层布局

通过JS实现拖拽变更层布局的代码,改变当前行的第一列,同时改变其他行的布局

<!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <!--引用jquery-->
     <script src="JS/jquery-1.7.1.min.js"></script>
    <script type="text/javascript">
        var srcwidth = 900;  //整个面板的宽
        var currRow = 0;  //当前操作的行
        $(function () {
            //绑定需要拖拽改变大小的元素对象 每行的第一列 暂时支持一行两列
            bindResize(document.getElementById(‘p00‘));
            bindResize(document.getElementById(‘p10‘));
            bindResize(document.getElementById(‘p20‘));
        });
        function bindResize(el) {

            var els = el.style,
            x = y = 0;
            $(el).mousedown(function (e) {
                currRow = el.id;
                x = e.clientX - el.offsetWidth,
                y = e.clientY - el.offsetHeight;
                el.setCapture ? (
                    el.setCapture(),
                    el.onmousemove = function (ev) {
                        mouseMove(ev || event);
                    },
                    el.onmouseup = mouseUp
                ) : (
                    $(document).bind("mousemove", mouseMove).bind("mouseup", mouseUp)
                );
                e.preventDefault();
            });

            //移动事件
            function mouseMove(e) {
                els.width = e.clientX - x + ‘px‘,
                els.height = e.clientY - y + ‘px‘;

                var cx = currRow.substr(1, 1);  //当前行
                var cy = currRow.substr(2, 1);   //当前列

                var docCur = $("#p" + cx + cy);   //current row colum
                docCur.css({ "width": ((parseInt(docCur.css("width").replace("px", ""))) > srcwidth ? srcwidth : (parseInt(docCur.css("width")))) });
                var docCurCopy = docCur;

                var cya = parseInt(cy) + 1;   //当前列+1
                var docNCol = $("#p" + cx + cya);   //next colum
                if (docNCol != null) {
                    docNCol.css({ "left": (parseInt(docCur.css("left").replace("px", ""))) + (parseInt(docCur.css("width").replace("px", ""))) });
                    docNCol.css({ "width": (srcwidth - (parseInt(docCur.css("width").replace("px", "")))) });
                    docNCol.css({ "top": (docCur.css("top")) });
                    docNCol.css({ "height": docCur.css("height") });
                }

                for (var i = 1; i < 4; i++) {
                    var cxa = parseInt(cx) + i;   //当前行+1
                    var docNRow = $("#p" + cxa + cy);   //next row
                    if (docNRow != null) {
                        docNRow.css({ "left": (parseInt(docCurCopy.css("left").replace("px", ""))) });
                        docNRow.css({ "top": (parseInt(docCurCopy.css("top").replace("px", ""))) + (parseInt(docCurCopy.css("height").replace("px", ""))) });

                        var docNCol = $("#p" + cxa + 1);   //next colum
                        if (docNCol != null) {
                            docNCol.css({ "left": (parseInt(docNRow.css("left").replace("px", ""))) + (parseInt(docNRow.css("width").replace("px", ""))) });
                            docNCol.css({ "width": (srcwidth - (parseInt(docNRow.css("width").replace("px", "")))) });
                            docNCol.css({ "top": (docNRow.css("top")) });
                            docNCol.css({ "height": docNRow.css("height") });
                        }
                    }
                    docCurCopy = docNRow;
                }
                $("#megshow").html("#p" + els.width + els.height);
            }
            //停止事件
            function mouseUp() {
                el.releaseCapture ? (
                    el.releaseCapture(),
                    el.onmousemove = el.onmouseup = null
                ) : (
                    $(document).unbind("mousemove", mouseMove).unbind("mouseup", mouseUp)
                );
            }
        }
    </script>
    <style type="text/css">

        #p00 { position: absolute; top: 100px; left: 200px; width: 400px; height: 300px; background: #f1f1f1;
                text-align: center; line-height: 100px; border: 1px solid #CCC; cursor: se-resize; }
        #p01,#p11,#p21 {
                position:absolute; top:80px; left:400px; width:200px; height:200px; background:#8a9bca; cursor:move;
        }
        #p10 { position: absolute; top: 400px; left: 100px; width: 400px; height: 300px; background: #f1f1f1;
                text-align: center; line-height: 100px; border: 1px solid #CCC; cursor: se-resize; }
        #p20,#p30 { position: absolute; top: 400px; left: 100px; width: 400px; height: 300px; background: #f1f1f1;
                text-align: center; line-height: 100px; border: 1px solid #CCC; cursor: se-resize; }
    </style>
</head>
<body>
    <div id="megshow"></div>
    <div id="p00">
        这是内容1
    </div>
    <div id="p01">
        这是内容2
    </div>
    <div id="p10">
        这是内容3
    </div>
    <div id="p11">
        这是内容2
    </div>
    <div id="p20">
        这是内容4
    </div>
    <div id="p21">
        这是内容2
    </div>
    <div id="p30">
        这是内容5
    </div>
</body>
</html>
时间: 2024-10-07 06:29:40

独创轻松实现拖拽,改变层布局的相关文章

Winform拖拽改变无边框窗体大小

大家在进行Winform开发过程中,很容易就可以完成一个窗口的布局工作,但现在的软件界面美化效果一个比一个好,很多软件都是无边框的,于是乎,你是不是也感叹:winform的带边框的窗体如此丑陋,我一定要把边框去掉!OK,去掉边框对Winform来说那绝对一件相当easy的事情,一句this.FormBorderStyle=FormBorderStyle.None就可搞定.       简单倒是简单,边框去掉了,达到了自己的要求,但同时来了很多麻烦,其中一个就是窗口无法拖动改变大小了(这个问题在网

拖拽改变元素位置或大小bug修复

<!doctype html><html><head>   <meta charset="utf-8">   <title>无标题文档</title><style>body{   background:#000;}.upshop-view{   width:320px;   height:499px;   background:#fff;   background-size:contain;   pos

浏览器兼容的实现table中通过拖拽改变列宽的最佳实践

在企业级应用中,表格是非常常见的展现方式,这时当列数据较长时,一种比较自然,体验也较好的处理方式就是通过拖拽改变列宽,这个功能在一些重量级JS组件库中都有提供,实现原理各有不同,但是一个共同点就是实现比较复杂,那我们通过很少的代码,常规的table结构,能实现这个功能么?本文将提供一个经过实际验证的实践,供开发者参考,扩展思路. 总体思路: 1.HTML结构: 为了简化代码,采用标准的HTML结构,即table-tr-td模式,无其他限制,在我们的实际应用中,表格非常复杂,但是核心技术没有变:

JQuery拖拽改变元素的尺寸

"元素拖拽改变大小"其实和"元素拖拽"一个原理,只是所动态改变的对象不同而已,主要在于 top.left.width.height 的运用,相对实现起来也非常容易.以下附出源码原型,弄明白了原理再扩展其他实际应用,思路就变得简单.清晰得多了.先来看看效果:塔河县臧清机械 下面是 JavaScript Code view source print? 01 <script type="text/javascript"> 02     /*

javascript动画系列第四篇——拖拽改变元素大小

× 目录 [1]原理简介 [2]范围圈定 [3]大小改变[4]代码优化 前面的话 拖拽可以让元素移动,也可以改变元素大小.本文将详细介绍拖拽改变元素大小的效果实现 原理简介 拖拽让元素移动,是改变定位元素的left和top值实现的.而拖拽改变元素大小,则还需要改变元素的宽高 范围圈定 我们把改变元素大小的范围圈定在距离相应边10px的范围内 左侧边界L = obj.offsetLeft + 10 右侧边界R = obj.offsetLeft + obj.offsetWidth - 10 上侧边界

拖拽改变元素位置或大小

<!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title><style>body{ background:#000;}.upshop-view{ width:320px; height:499px; background:#fff; background-size:contain; position:relative; z-

拖拽改变div的大小

拖拽改变div的大小 1 <!DOCTYPE html> 2 <html> 3 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6 <title>Resize</title> 7 <style type="text/css"> 8 #rRightDow

jquery插件之拖拽改变元素大小

该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽改变元素大小的效果,您可以根据自己的实际需求来设置被拖拽元素的最小宽高和最大宽高.整体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitiona

JS拖拽(改变物体大小)

拖拽改变物体大小功能:拖拽黄色小div来改变绿色大div的宽和高 主要实现由三大步: 1. 通过id获取到大小两个div 2. 给小div添加onmousedown事件 3. 在onmousedown事件给document添加onmousemove和onmouseup事件 由分析图可知,我们只需要在拖拽的时候,获取到物体不断增加的宽度值,问题就解决了 <div id="panel"> <div id="dragIcon"></div&g