问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jQuery 通过鼠标摇拽改变div的大小

发布网友 发布时间:2022-05-15 21:57

我来回答

3个回答

懂视网 时间:2022-05-16 02:19

1.初次实现

1.1 html代码

<html xmlns="www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>div change width by drag</title><script src="../jQuery/jquery-1.8.3.min.js?1.1.11" type="text/javascript"></script></head><body><h1>div change width by drag</h1><div id="pos" style="color:red"></div><div id="myDiv" style="border:2px solid red;width:300px;height:50px;margin-left: 100px;margin-top: 20px"></div></body></html>

1.2 js代码

          var eleLeft = $('#myDiv').offset().left;var isMouseDown = false;var borderLen = 4; //左右边框  
  $('#myDiv').bind({
   mousedown:function(e){var ele = $(this);var rightPos = eleLeft + ele.width() + borderLen;if(rightPos-5 <= e.pageX && e.pageX <= rightPos){
    isMouseDown = true;

   }
   },
  
   mousemove:function(e){var ele = $(this);var rightPos = eleLeft + ele.width() + borderLen;
   $('#pos').text("x:"+e.pageX + " eleLeft:"+eleLeft+" rightPos:"+rightPos);if(rightPos-5 <= e.pageX && e.pageX <= rightPos){
    ele.css('cursor','e-resize');
   }else{if(!isMouseDown){
    ele.css('cursor','auto');
    }
   }if(isMouseDown){
    ele.width((e.pageX-eleLeft-borderLen)+'px'); //新鼠标位置-div距左-borderLen   }
   },
   mouseup:function(e){
   isMouseDown = false;
   }
  });

1.3 结果

只能往左拖动使div宽度变小,往右拖动没有用!原因往右拖动鼠标mousemove事件无法被div捕获了。拖动时也很难停下来!所以得改进。

2.再次改进

          $('#myDiv' ele = $( rightPos = eleLeft + ele.width() +(rightPos-5 <= e.pageX && e.pageX <== 'body' ele = $('#myDiv' rightPos = eleLeft + ele.width() +'#pos').text("x:"+e.pageX + " eleLeft:"+eleLeft+" rightPos:"+(rightPos-5 <= e.pageX && e.pageX <='cursor','e-resize'(!'cursor','auto'-eleLeft-borderLen)+'px'); =

这次解决了上述问题,可以往右拖,并且随时可以停下来了。到这里就完成了吗?NO!

当我引入一个其他div,并且阻止mouseup事件冒泡情况怎么样呢?答案是,拖动到这个其它div上放开鼠标后无法停止下来!

<div id="otherDiv" style="border: 2px solid blue;width: 200px;height: 200px;margin-left: 400px"></div>

         $('#otherDiv').mouseup(function(e){//e.preventDefault(); //阻止默认行为e.stopPropagation(); //阻止事件冒泡(导致body捕获不到mouseup事件)});

3.完美解决

拖动停止可能受到其它元素的干扰,怎么解决?想到一些弹出层点击其它其它地方隐藏的功能,让我想到了,加一个遮罩层,让mouseup事件总是可以响应,不就搞定了嘛!

        $('#myDiv').bind({
   mousedown:function(e){var ele = $(this);var rightPos = eleLeft + ele.width() + borderLen;if(rightPos-5 <= e.pageX && e.pageX <= rightPos){
    isMouseDown = true;//创建遮罩层,防止mouseup事件被其它元素阻止冒泡,导致mouseup事件无法被body捕获,导致拖动不能停止var bodyWidth = $('body').width();var bodyHeight = $('body').height();
    $('body').append('<div id="mask" style="opacity:0.2;top:0px;left:0px;background-color:green;position:absolute;z-index:9999;width:'+bodyWidth+'px;height:'+bodyHeight+'px;"></div>');
   }
   }
  });

  $('body').bind({
   mousemove:function(e){var ele = $('#myDiv');var rightPos = eleLeft + ele.width() + borderLen;
   $('#pos').text("x:"+e.pageX + " eleLeft:"+eleLeft+" rightPos:"+rightPos);if(rightPos-5 <= e.pageX && e.pageX <= rightPos){
    ele.css('cursor','e-resize');
   }else{if(!isMouseDown){
    ele.css('cursor','auto');
    }
   }if(isMouseDown){
    ele.width((e.pageX-eleLeft-borderLen)+'px'); 
   }
   },
   mouseup:function(e){
   isMouseDown = false;
   $('#mask').remove();
   }
  });

  $('#otherDiv').mouseup(function(e){//e.preventDefault(); //阻止默认行为e.stopPropagation(); //阻止事件冒泡(导致body捕获不到mouseup事件)});

4.完整代码和最终效果

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>div change width by drag</title><script src="../jQuery/jquery-1.8.3.min.js?1.1.11" type="text/javascript"></script>
 </head><body><h1>div change width by drag</h1><div id="pos" style="color:red"></div>
 <div id="myDiv" style="border:2px solid red;width:300px;height:50px;margin-left: 100px;margin-top: 20px"></div><div id="otherDiv" style="border: 2px solid blue;width: 200px;height: 200px;margin-left: 400px"></div></body><script type="text/javascript">$(document).ready(function(){var eleLeft = $('#myDiv').offset().left;var isMouseDown = false;var borderLen = 4; //左右边框$('#myDiv').bind({
   mousedown:function(e){var ele = $(this);var rightPos = eleLeft + ele.width() + borderLen;if(rightPos-5 <= e.pageX && e.pageX <= rightPos){
    isMouseDown = true;//创建遮罩层,防止mouseup事件被其它元素阻止冒泡,导致mouseup事件无法被body捕获,导致拖动不能停止var bodyWidth = $('body').width();var bodyHeight = $('body').height();
    $('body').append('<div id="mask" style="opacity:0.2;top:0px;left:0px;background-color:green;position:absolute;z-index:9999;width:'+bodyWidth+'px;height:'+bodyHeight+'px;"></div>');
   }
   }
  });

  $('body').bind({
   mousemove:function(e){var ele = $('#myDiv');var rightPos = eleLeft + ele.width() + borderLen;
   $('#pos').text("x:"+e.pageX + " eleLeft:"+eleLeft+" rightPos:"+rightPos);if(rightPos-5 <= e.pageX && e.pageX <= rightPos){
    ele.css('cursor','e-resize');
   }else{if(!isMouseDown){
    ele.css('cursor','auto');
    }
   }if(isMouseDown){
    ele.width((e.pageX-eleLeft-borderLen)+'px');    }
   },
   mouseup:function(e){
   isMouseDown = false;
   $('#mask').remove();
   }
  });

  $('#otherDiv').mouseup(function(e){//e.preventDefault(); //阻止默认行为   e.stopPropagation(); //阻止事件冒泡(导致body捕获不到mouseup事件)  });
  });</script></html>

热心网友 时间:2022-05-15 23:27

身为一个前端人,必须告诉你的是:前端效果很多都是用表象来忽悠人的。

要做你要的效果需要作假:
①做3个用于拖动标签(右边、下边、右下角)三个,默认是空白的,根据原来的DIV定义大小和位置,绝对定位,hover上去鼠标变一下,点击鼠标可拖拽。
②拖拽的过程中实时改变原div大小并同时修改相关拖动标签的大小位置。
③拖拽可使用jQueryUI的核心库就可以了。

热心网友 时间:2022-05-16 00:45

不知道啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
胶原蛋白线双眼皮是不是永久性 双眼皮埋线是蛋白质还是尼龙绳-双眼皮埋线蛋白线多久能吸收 人体输液的“港口”完全植入式输液港 双眼皮宽变窄修复的方法 同心保家庭重疾险靠不靠谱?便宜吗? 做完双眼皮一宽一窄怎么办 喝全脂奶粉对长高有没有什么好处? redmine中“选择一个项目..."下拉列表框中为什么只列出一个项目,我建... 南充市龙门中学实力现在怎样?他的奥赛班是重点班么? 感情中为什么总是不知足呢? &quot;袁大头&quot;银元二年造价值多少钱? 求一款安卓手机软件,绿色图标,D开头,管理手机软件用的,可以禁用其他软件,大小不超过1M。 有什么软件可以让手机屏幕变成绿色的? 绿色手机清理软件怎么删除 智能手机里,绿色软件是什么意思,和普通的软件有什么区别阿? 什么绿色软件好???(手机可以用) 绿色手机软件下载网站?免费手机软件下载网站? 钛合金卡子取的还有一个有问题吗 哪些是手机 绿色的空间软件? 三层交换机如何直连电脑? 谁有青藏高原的资料,帮帮忙!!! 从交换机出来的网线能直接接到电脑上网嘛? 青藏高原的资料讲一讲 光纤通过交换机之后可不可以直接连接电脑 抹胸或裹胸应该怎么穿不会下垂啊 频临灭绝的野生动物的名称、数目及所受危害?很急的! 国家三级保护植物和动物 3层交换机直接连pc有什么作用 Pos机能刷钛合金材质的卡吗?美国运通就是钛合金的那得怎么刷呢? 猫被狗咬到了怎么办啊 自考本科会计在哪里报名什么科目? 自考本科会计专业要考哪些 流-固耦合影响 李白的驱鬼诗是真是假? 李白额驱鬼诗是真额假的 流固耦合力学一般指什么力学问题 李白为什么写驱鬼诗 女人头晕眼花怎么回事 最近这两天不知道怎么了,走路时头晕眼花浑身没劲感觉头很大女性? 唛头sik是什么意思 驱鬼诗李白 李白的诗全集驱鬼 李白的诗驱鬼 李白有驱鬼这首诗吗 身体突然不舒服,头昏眼花是什么问题? 那个网上盛传的李白驱鬼诗是真的吗? 女人头昏眼花心慌是什么原因? 李白的驱鬼诗是真ShiJia 李白的驱鬼诗是真的吗 写出你所知道的搜索引擎和中文名 头晕眼花注意力不集中,浑身没劲是怎么回事 有哪三个常用的搜索引擎名 沙巾上的 sik是什么意思