• 左右移动的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>无标题文档-SH!</title>
    <style>
    /* 左右分割条样式 */
    .lrSeparator {
    background-color:#549FE3;
    cursor:e-resize;
    font-size : 1px;
    }
    /* 上下分割条样式 */
    .udSeparator {
    background-color:#549FE3;
    cursor:s-resize;
    font-size : 1px;
    }
    td {
    border:1px solid #549FE3;
    }
    </style>
    <script>
    /**
    * 类 名 称: Separator|SP
    * 功能说明: 分割条类
    * 版权信息: CopyRight 2005-2006 JoeCom
    * 参数说明: o1,o2 : 两个对象
    spTpe: 方向,是左右,还是上下
    w:宽度;wx:left的差值;wy:top的差值
    wh:左右拖动时,是宽度的差值,上下则是高度的差值
    wl:上下拉动时时的一个差值
    差值的存在是因为控件可能存在border,padding,top等一些情况,
    还有就是控件的position不是为absolute
    * 创 建 人: JoeCom | MSN:juwuyi@hotmail.com | blog:http://hi.baidu.com/joecom
    * 创建日期: 2006-07-27
    * 修改记录:
    * 备 注 : IE下效果最好,FF下TD标签不支持onresize事件?
    */

    //以下定义拖拉方向的常量
    SP_LEFTRIGHT = 1; //左右拖拉
    SP_UPDOWN = 2; //上下拖拉

    function Separator(o1,o2,spType,w,wx,wy,wh,wl){
    var me = this;
    this.o1 = (typeof o1=="string")?document.getElementById(o1):o1;
    this.o2 = (typeof o2=="string")?document.getElementById(o2):o2;
    this.w = w||3; //Width or Height
    this.wx = wx||0; //parentOffsetLeft
    this.wy = wy||0; //parentOffsetTop
    this.wh = wh||0; //parentOffsetHeight
    this.wl = wl||0; //parentOffsetWidth
    //this.wr = wr||0; //parentOffsetRight
    this.autoresize = true;
    this.spType = (spType==SP_UPDOWN)?SP_UPDOWN:SP_LEFTRIGHT;
    this.allWidth = this.o1.clientWidth + this.o2.clientWidth + this.w ;
    this.allHeight = this.o1.clientHeight + this.o2.clientHeight + this.w ;
    this.isIE = false;

    this.addEvent = function(el, evname, func) {
    if (el.attachEvent) { // IE
    el.attachEvent("on" + evname, func);
    this.isIE = true;
    } else if (el.addEventListener) { // Gecko / W3C
    el.addEventListener(evname, func, true);
    } else {
    el["on" + evname] = func;
    }
    };

    this.sp = document.createElement("div");
    document.body.appendChild(this.sp);

    this.init = function(){
    if (this.spType==SP_LEFTRIGHT)
    {
    with (this.sp){
    style.position = "absolute";
    style.left = this.o1.offsetLeft + this.o1.clientWidth + this.wx + "px";
    style.top = this.o1.offsetTop + this.wy + "px" ;
    style.width = this.w;
    style.height = this.o1.clientHeight + this.wh + "px";
    className = "lrSeparator";
    style.zIndex = "200";
    }
    }else
    {
    with (this.sp){
    style.position = "absolute";
    style.left = this.o1.offsetLeft + this.wx + "px";
    style.top = this.o1.offsetTop + this.o1.clientHeight + this.wy + "px" ;
    style.width = this.o1.clientWidth + this.wh + "px";
    style.height = this.w;
    className = "udSeparator";
    style.zIndex = "200";
    }
    }
    }

    this.init();
    this.dd = new ObjectDragDrop(this.sp);
    this.dd.moveStyle = (this.spType==SP_LEFTRIGHT)?DD_HMOVE:DD_VMOVE;

    this.resize = function(){
    this.init();
    }

    this.addEvent(window,"resize",function(){me.resize();});
    this.addEvent(this.o1,"resize",function(){me.resize();});

    this.dd.isMoved = function(newPosX,newPosY){
    if (me.spType==SP_LEFTRIGHT)
    {
    var mw1 = me.o1.getAttribute("minWidth");
    var mw2 = me.o2.getAttribute("minWidth");
    if (mw1==null){mw1 = 0;}
    if (mw2==null){mw2 = 0;}
    return {x:((newPosX - me.o1.offsetLeft)>=mw1&&(newPosX - me.o1.offsetLeft)<=(me.allWidth - mw2)),y:false};
    }else
    {
    var mh1 = me.o1.getAttribute("minHeight");
    var mh2 = me.o2.getAttribute("minHeight");
    if (mh1==null){mh1 = 0;}
    if (mh2==null){mh2 = 0;}
    return {x:false,y:((newPosY - me.o1.offsetTop - me.wy)>=mh1&&(newPosY - me.o1.offsetTop - me.wy)<=( me.allHeight - mh2))};
    }
    }

    this.dd.onDrop = function(){
    if (me.spType==SP_LEFTRIGHT)
    {
    me.o1.style.width = me.sp.offsetLeft - me.o1.offsetLeft - me.wx - me.wl;
    if (!me.autoresize){
    me.o2.style.width = me.allWidth - me.o1.clientWidth - me.w;
    if (me.o2.tagName!="TD")
    {
    me.o2.style.left = me.sp.offsetLeft;
    }
    }
    }else
    {
    me.o1.style.height = me.sp.offsetTop - me.o1.offsetTop - me.wy;
    if (!me.autoresize){
    me.o2.style.height = me.allHeight - me.o1.clientHeight ;
    if (me.o2.tagName!="TR")
    {
    me.o2.style.top = me.sp.offsetTop;
    }
    }
    }
    if (!me.isIE){
    me.init();
    }
    }
    }

    /**
    * 类 名 称: DragDrop|DD
    * 功能说明: 可拖动类
    * 版权信息: CopyRight 2005-2006 JoeCom
    * 创 建 人: JoeCom | MSN:juwuyi@hotmail.com | blog:http://hi.baidu.com/joecom
    * 创建日期: 2006-07-19
    * 修改记录: 1. 2006-07-21 加上scrollTop 和 scrollLeft的相对移动
    ł. 2006-07-25 加入moveStyle属性,增加水平移动和垂直移动的功能
    Ń. 2006-07-25 加入isMoved函数,增加范围移动功能
    */

    //以下定义移动方向的常量
    DD_FREEMOVE = 0; //自由移动,没有限制
    DD_HMOVE = 1; //水平移动,也就是左右移动
    DD_VMOVE = 2; //垂直移动,也就是上下移动

    function ObjectDragDrop(obj){
    var me = this;
    this.moveStyle = DD_FREEMOVE ;
    this.foo = (typeof obj=="string")?document.getElementById(obj):obj;
    this.onDrop = function(){};
    this.onDrag = function(){};
    this.isMoved = function(newPosX,newPosY){return {x:true,y:true}};//offsetX:x的移动距离;offsetY:y的移动距离

    this.foo.onmousedown = function(e){
    var foo = me.foo;
    e = e||event;
    if( e.layerX ){ foo.oOffset = {x:e.layerX, y:e.layerY }; }
    else { foo.oOffset = {x:e.offsetX, y:e.offsetY }; }
    document.onmousemove = me.drag;
    document.onmouseup = me.drop;
    document.onselectstart = function(){ return false; };
    }

    this.drag = function(e){
    var foo = me.foo;
    e=e||event;
    var mv = me.isMoved(e.clientX - foo.oOffset.x + document.body.scrollLeft,
    e.clientY - foo.oOffset.y + document.body.scrollTop);
    if (mv.x&&me.moveStyle!=DD_VMOVE)
    {
    foo.style.left = e.clientX - foo.oOffset.x + document.body.scrollLeft + "px";
    }
    if (mv.y&&me.moveStyle!=DD_HMOVE)
    {
    foo.style.top = e.clientY - foo.oOffset.y + document.body.scrollTop + "px";
    }
    me.onDrag();
    }

    this.drop = function(e){
    e=e||event;
    document.onmousemove = document.onmouseup = document.onselectstart = null;
    me.onDrop();
    }
    }


    </script>
    <script>
    window.onload=function(){
     
    //div左右拉动
    var divsp = new Separator(divl,divr,SP_LEFTRIGHT,2);
    divsp.autoresize = false;

    }
    </script>
    </head>

    <body>
    <div id=divl minWidth="30" style="position:absolute;top:350px;100px;left:0px;height:100px;background-color:#CCCCCC">div1</div>
    <div id=divr minWidth="30" style="position:absolute;top:350px;100px;left:102px;height:100px;background-color:#FF0000">div2</div>

    </body>
    </html>

  • 相关阅读:
    [Swift]LeetCode128. 最长连续序列 | Longest Consecutive Sequence
    [Swift]LeetCode126. 单词接龙 II | Word Ladder II
    [Swift]LeetCode127. 单词接龙 | Word Ladder
    [Xcode 实际操作]二、视图与手势-(6)给图像视图添加阴影效果
    [Swift]LeetCode124. 二叉树中的最大路径和 | Binary Tree Maximum Path Sum
    [Xcode 实际操作]二、视图与手势-(5)给图像视图添加圆角效果
    [Swift]LeetCode123. 买卖股票的最佳时机 III | Best Time to Buy and Sell Stock III
    [Swift]LeetCode120. 三角形最小路径和 | Triangle
    [Java]LeetCode117. 填充同一层的兄弟节点 II | Populating Next Right Pointers in Each Node II
    话说美国崛起
  • 原文地址:https://www.cnblogs.com/bestsaler/p/1835521.html
Copyright © 2020-2023  润新知