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

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

大概思路为:

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

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

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

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

    1. //左边区域
    2. <div id="main">
    3. <div id="left"></div>
    4. <div id="right"></div>
    5. </div>
    6. //可拖拽区域,border充当鼠标点击的区域
    7. <div id="div">
    8. <div id="content">可拖拽</div>
    9. <div id="border"></div>
    10. </div>
    1. html,
    2. body {
    3. padding: 0;
    4. margin: 0;
    5. overflow: hidden;
    6. }
    7. #main {
    8. display: inline-flex;
    9. position: absolute;
    10. z-index: 1;
    11. }
    12. #left {
    13. flex: 2;
    14. height: 100%;
    15. background-color: cadetblue;
    16. }
    17. #right {
    18. flex: 10;
    19. height: 100%;
    20. background-color: cornsilk;
    21. }
    22. #div {
    23. width: 100px;
    24. background-color: bisque;
    25. position: absolute;
    26. right: 0;
    27. z-index: 2;
    28. }
    29. #content {
    30. padding-left: 5px;
    31. }
    32. #border {
    33. height: 100%;
    34. width: 5px;
    35. cursor: e-resize;
    36. background-color: black;
    37. position: absolute;
    38. top: 0;
    39. left: 0;
    40. }
  • 再写js代码

    1. //给div的初始赋值
    2. var height = window.innerHeight;
    3. var width = window.innerWidth;
    4. $('#div').css({ 'width': width * 0.12, 'height': height })
    5. $('#main').css({ 'width': width, 'height': height })
    6. move();
    7. //动态赋值函数
    8. function move() {
    9. var _move = false; //赋值标志,为真时给拖拽层赋值
    10. //鼠标按下但未抬起
    11. $("#border").mousedown(function (e) {
    12. _move = true;
    13. })
    14. //鼠标移动
    15. $(document).mousemove(function (e) {
    16. //标志为真时赋值
    17. if (_move) {
    18. //用文档的可见区域宽减去当前鼠标相对于文档左边缘的宽度,得到的值即为拖拽层的宽度
    19. var x = window.innerWidth - e.pageX;
    20. //设置拖拽层最小宽度
    21. if (x <= window.innerWidth * 0.01) {
    22. x = window.innerWidth * 0.01;
    23. }
    24. // 设置拖拽层最大宽度
    25. if (x >= window.innerWidth) {
    26. x = window.innerWidth;
    27. }
    28. //给div设置宽度
    29. $('#div').css('width', x)
    30. }
    31. }).mouseup(function () {
    32. //鼠标按下并抬起
    33. _move = false;
    34. });
    35. }
  • 此时,页面基本上已经可以实现拖拽赋值的效果了,但是我发现在改变浏览器大小时,元素的大小并不会随之改变,而是要刷新后才可以

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

    1. window.onload = function () {
    2. setSize();
    3. }
    4. window.onresize = function () {
    5. setSize()
    6. }
    7. function setSize() {
    8. var height = window.innerHeight;
    9. var width = window.innerWidth;
    10. $('#div').css({ 'width': width * 0.12, 'height': height })
    11. $('#main').css({ 'width': width, 'height': height })
    12. }
    13. move();
    14. function move(){
    15. ...同上
    16. }

    最终效果为:

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. 基于ManagedDataAccess开发的OracleDBHelpe工具集伸手党的福音

    在使用前先加入ManagedDataAccessDLL文件方可使用 添加方法:右键项目.点击管理NuGet程序包,点击浏览,在输入框内输入ManagedDataAccess,再点击安装即可 Oracl ...

  2. vue实例化过程

    我们在用vue进行开发项目时,是否存在疑惑,new Vue(xxx)的过程中,究竟发生了什么?定义的数据,是如何绑定到视图上的?本篇主要介绍在实例化vue时,主要做了哪些事,文章比较长,主要篇幅内容为 ...

  3. 自动列表排序.html

    li:before { content: counter(chapter) ". "; counter-increment: chapter; font-weight: bold; ...

  4. 【nodejs原理&源码杂记(8)】Timer模块与基于二叉堆的定时器

    [摘要] timers模块部分源码和定时器原理 示例代码托管在:http://www.github.com/dashnowords/blogs 一.概述 Timer模块相关的逻辑较为复杂,不仅包含Ja ...

  5. ssm三大框架整合基本配置

    ssm三大框架整合基本配置 maven目录结构 数据库脚本mysql create database maven; use maven ; -- --------------------------- ...

  6. Docker Compose集成式应用组合及service编排

    Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在 https://github.com/docker/compose 开源.C ...

  7. [TimLinux] JavaScript 如何在html标签的data-*属性使用JSON数据

    1. HTML data-*属性 H5引入的data-*属性,可以在JavaScript通过.dataset.*的方式来获取属性的值,例如: /* HTML标签: * <input id=&qu ...

  8. hdu3015,poj1990树状数组

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3015 题意:给定n组数,每组数有值x和值h,求n组数两两的val的总和.将所有x和所有h分别离散化(不 ...

  9. python学习笔记-生成随机数

    更多大数据分析.建模等内容请关注公众号<bigdatamodeling> 在实现算法时经常会用到随机数,有时会忘记各种随机数的生成方法,这里对Python中的随机数生成方法进行汇总,以供以 ...

  10. 怎么样才算是精通 Python?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:weixin_45587093 你们所说的什么要怎样数据分析.爬虫.We ...