最近项目进程紧张,没法再愉快的网上冲浪了

因为项目需要实现一个页面上可拖拽改变div宽度的功能,类似效果如Chrome的右侧调试台样式:

大概思路为:

1.使用mousemove()方法,将鼠标的位置动态的赋予拖拽层

2.使用mousedown()方法,在鼠标被按下未抬起的过程中执行mousemove()

3.使用mouseup()方法,在鼠标按下并抬起后不执行mousemove()

实现步骤为:
  • 先搭好页面静态样式

    //左边区域
    <div id="main">
    <div id="left"></div>
    <div id="right"></div>
    </div>
    //可拖拽区域,border充当鼠标点击的区域
    <div id="div">
    <div id="content">可拖拽</div>
    <div id="border"></div>
    </div>
    html,
    body {
    padding: 0;
    margin: 0;
    overflow: hidden;
    } #main {
    display: inline-flex;
    position: absolute;
    z-index: 1;
    } #left {
    flex: 2;
    height: 100%;
    background-color: cadetblue;
    } #right {
    flex: 10;
    height: 100%;
    background-color: cornsilk;
    } #div {
    width: 100px;
    background-color: bisque;
    position: absolute;
    right: 0;
    z-index: 2;
    } #content {
    padding-left: 5px;
    } #border {
    height: 100%;
    width: 5px;
    cursor: e-resize;
    background-color: black;
    position: absolute;
    top: 0;
    left: 0;
    }
  • 再写js代码

    //给div的初始赋值
    var height = window.innerHeight;
    var width = window.innerWidth;
    $('#div').css({ 'width': width * 0.12, 'height': height })
    $('#main').css({ 'width': width, 'height': height }) move();
    //动态赋值函数
    function move() {
    var _move = false; //赋值标志,为真时给拖拽层赋值 //鼠标按下但未抬起
    $("#border").mousedown(function (e) {
    _move = true;
    }) //鼠标移动
    $(document).mousemove(function (e) {
    //标志为真时赋值
    if (_move) {
    //用文档的可见区域宽减去当前鼠标相对于文档左边缘的宽度,得到的值即为拖拽层的宽度
    var x = window.innerWidth - e.pageX;
    //设置拖拽层最小宽度
    if (x <= window.innerWidth * 0.01) {
    x = window.innerWidth * 0.01;
    }
    // 设置拖拽层最大宽度
    if (x >= window.innerWidth) {
    x = window.innerWidth;
    }
    //给div设置宽度
    $('#div').css('width', x)
    }
    }).mouseup(function () {
    //鼠标按下并抬起
    _move = false;
    });
    }
  • 此时,页面基本上已经可以实现拖拽赋值的效果了,但是我发现在改变浏览器大小时,元素的大小并不会随之改变,而是要刷新后才可以

  • 这样非常影响使用感,所有我又调用了window.onresize()方法,在每次窗口被调整大小时给元素重新设置宽高即可

    window.onload = function () {
    setSize();
    } window.onresize = function () {
    setSize()
    } function setSize() {
    var height = window.innerHeight;
    var width = window.innerWidth;
    $('#div').css({ 'width': width * 0.12, 'height': height })
    $('#main').css({ 'width': width, 'height': height })
    } move();
    function move(){
    ...同上
    }

    最终效果为:

jQuery实现类似Chrome控制台可拖拽改变宽度的样式的更多相关文章

  1. table可拖拽改变宽度

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. extjs grid禁止表格头部使用鼠标拖拽改变宽度

    extjs6 经典版 表格头部使用鼠标拖动 禁止改变列的宽度 只需要给grid 设置属性enableColumnResize:false就可以啦 xtype:'grid', enableColumnR ...

  3. jQuery拖拽改变元素大小

    一个非常简单的例子,体验效果:http://keleyi.com/keleyi/phtml/jqtexiao/29.htm 以下是完整代码,保存到HTML文件打开也可以体验效果. <!DOCTY ...

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

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽改变元素大小的效果,您可以根据自己的实际需求来设置被 ...

  5. JQuery拖拽改变元素的尺寸

    "元素拖拽改变大小"其实和"元素拖拽"一个原理,只是所动态改变的对象不同而已,主要在于 top.left.width.height 的运用,相对实现起来也非常容 ...

  6. 拖拽改变div的大小

    拖拽改变div的大小 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type&qu ...

  7. JavaScript动画-拖拽改变元素大小

    ▓▓▓▓▓▓ 大致介绍 拖拽改变元素大小是在模拟拖拽上增加了一些功能 效果:拖拽改变元素大小 ▓▓▓▓▓▓ 拖拽改变元素大小原理 首先这个方块得知道我们想要改变这个它的大小,所以我给它设定一个范围,当 ...

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

    × 目录 [1]原理简介 [2]范围圈定 [3]大小改变[4]代码优化 前面的话 拖拽可以让元素移动,也可以改变元素大小.本文将详细介绍拖拽改变元素大小的效果实现 原理简介 拖拽让元素移动,是改变定位 ...

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

    大家在进行Winform开发过程中,很容易就可以完成一个窗口的布局工作,但现在的软件界面美化效果一个比一个好,很多软件都是无边框的,于是乎,你是不是也感叹:winform的带边框的窗体如此丑陋,我一定 ...

随机推荐

  1. 【并发编程】关于Thread类的详细介绍

    多线程编程基础--Thread类 Thread类是Java中实现多线程编程的基础类.本篇博客就来介绍下Thread类的常用API和常见用法. Thread类常用的方法如下: Thread.active ...

  2. python_thread

    多任务编程:可以有效的利用计算机资源,同时执行多个任务进程:进程就是程序在计算机中一次执行的过程进程 和 程序的区别:    1.程序是一个静态文件的描述,不占计算机的系统资源    2.进程是一个动 ...

  3. [ch04-05] 梯度下降的三种形式

    系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 4.5 梯度下降的三种形式 我们比较一下目前我们用三种方 ...

  4. #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库

    在Python的世界里,将一个对象以json格式进行序列化或反序列化一直是一个问题.Python标准库里面提供了json序列化的工具,我们可以简单的用json.dumps来将一个对象序列化.但是这种序 ...

  5. Python一秒搭建ftp服务器,帮助你在局域网共享文件

    "老板 来碗面" "要啥面?" "内牛满面.." 最近项目上的事情弄得人心累,本来是帮着兄弟项目写套入口代码,搞着搞着就被拉着入坑了.搞开发 ...

  6. springcloud集成redis

    1.application.properties/application.yml配置: redis: # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突 databa ...

  7. luogu P1731 [NOI1999]生日蛋糕 |暴力枚举

    题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱 ...

  8. IOS原生方法实现二维码生成与扫描

    转自:http://www.jianshu.com/p/d6663245d3fa 二维码的生成有好多第三方库,如Z-Xing.但是为了控制安装包的大小,或者并不需要其他的一些额外的功能,用系统的方法即 ...

  9. zuul+security跨域Cors问题解决

    zuul+security跨域Cors问题解决 简介 场景 在服务后台都会出现跨域cors问题,不过一般spring解决起来比较方便,在框架+框架的基础上,问题就显得特别明显了,各种冲突,不了解源码的 ...

  10. ARTS-S anaconda常用命令

    建新的环境 conda create --name py36 python=3.6 显示所有环境 conda info --envs 一键安装 wget https://repo.anaconda.c ...