js改变盒子大小(上下左右)分析

js改变盒子大小

知识点

三个mouse事件:mousedown mousemove mouseup

css的定位和cursor

思路

先解决单边问题
识别范围,得到所选区域 event.
根据距离,判断方向
根据方向进行样式的增加减少,注意top和left的变化
当然还要增加最小的限制

注意

识别改变的四个位置

得到它们的范围

判断改变范围的大小

注意改变top和left的边的时候,注意将盒子的left变为this.offsetLeft-(原来的event.clientX减去现在的event.clinentX);top则变为this.offsetTop-(原来的event.clientY减去现在的event.clinentY)

最后还要限制最小的范围

var container=document.getElementById(‘container‘),
          span=document.getElementById(‘span‘),
          move=document.getElementById(‘move‘),
          wrap=document.getElementById(‘wrap‘)
            divs=container.getElementsByTagName(‘div‘),
            top=divs[0],
            bottom=divs[1],
            left=divs[2],
            right=divs[3];
        //找到位置
        container.onmousedown=function(event){
              var event=event||window.event
              event.preventDefault()
              var mouseDownX=event.clientX
              var mouseDownY=event.clientY
              //得到位置
              var topLocal=this.offsetTop
              var bottomLocal=this.offsetTop+this.offsetHeight
              var leftLocal=this.offsetLeft
              var rightLocal=this.offsetLeft+this.offsetWidth

              var w=this.offsetWidth
              var h=this.offsetHeight
              //识别范围
              var areaT=topLocal+20
              var areaB=bottomLocal-20
              var areaL=leftLocal+20
              var areaR=rightLocal-20
              //判断改变方块的大小方向
              var changeL=event.clientX<areaL
              var changeR=event.clientX>areaR
              var changeT=event.clientY<areaT
              var changeB=event.clientY>areaB
              document.onmousemove=function(event){
                      var event=event||window.event
                      if(changeL){
                           container.style.left=leftLocal-(mouseDownX-event.clientX)+‘px‘
                           container.style.width=(mouseDownX-event.clientX)+w+‘px‘
                      }
                      if(changeR){
                            container.style.width=event.clientX-mouseDownX+w+‘px‘
                      }
                      if(changeT){
                            container.style.top=topLocal-(mouseDownY-event.clientY)+‘px‘
                            container.style.height=mouseDownY-event.clientY+h+‘px‘
                      }
                      if(changeB){
                            container.style.height=event.clientY-mouseDownY+h+‘px‘
                      }
                      if(parseInt(container.style.width)<150){
                              container.style.width=150+‘px‘
                              document.onmousemove=null
                      }
                      if(parseInt(container.style.height)<150){
                              container.style.height=150+‘px‘
                              document.onmousemove=null
                      }
              }
              document.onmouseup=function(){
                      document.onmousemove=null
                      document.onmouseup=null
              }
        }

原文地址:https://www.cnblogs.com/iDouble/p/8584476.html

时间: 2024-11-09 23:54:32

js改变盒子大小(上下左右)分析的相关文章

移动端遮罩层,内容大小改变动态大小

遮罩层的实现 .mask{ position:absolute; top:0; right:0; bottom:0; left:0; background-color:rgba(0,0,0,.3); z-index:1000; display:none; } 解释:如果想在某个区域设置遮罩层,就把.mask放在某个区域的div下:根据自己的需求设置宽高,定位也要适当删减修改: 层级就根据自己需求设置大小: 本人遇到的情况是数据不固定,遮罩层大小不固定: 数据多的情况下遮罩层正常遮罩,如果没数据或

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

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

用JS改变的元素CSS样式

CSS样式的引用有3种方式:style引用.class引用.id引用,所以js改变元素的样式我们也分3种来说. 1.js改变由style方式引用的样式:方法一:document.divs.style.cssText="border:1px solid #000000;color:#FF0000";方法二:document.divs.setAttribute("style","border:1px solid #000000;color:#FF0000&qu

葡萄城页面报表通过表达式来改变字体大小

如题,做报表时候,有时候要根据是否是合计行,来改变合计行的粗细,大小. 可以通过字体的表达式来实现: 表达式的通用写法:  =iif( Fields!YourFieldName.Value operator "Value to compare", "If condition is met, use this value.", "If not, use this one.") 如果满足条件(第一个参数),则执行第二个参数,否则执行最后一个参数 例如

关于js比较数字大小

<head> <meta http-equiv="Content-Type" content="text/html; charset=gbk"> <script type="text/javascript"> function compare(){ var t1 = document.getElementById("text1").value; var t2 = document.getEl

改变元素大小

<!DOCTYPE html><html><head> <title>改变元素大小</title> <style type="text/css"> div{ width: 200px; height: 200px; background-color: red; border: solid; /*如果想调整一个元素像textarea那样随意改变大小 我们可以使用resize 属性有 horizontal 可以改变元素

【Unity】改变向量的方向而不改变其大小

最近在做一个打砖块游戏时遇到一个小问题,就是小球有可能会在左右两个边界之间做循环往返运动而导致游戏无法继续进行下去,于是我打算让小球在垂直撞向边界时改变一下方向,但是速度不变,尝试了一些方法但是没有达到效果.后来想到,速度是一个向量,问题就变成了改变一个向量的方向而不改变它的大小,Google一下找到了这个旋转矩阵Wiki页面.虽然游戏是3D的但是只是在一个平面上运动,所以只需要下面这个旋转矩阵 用原向量矩阵[x,y]乘以旋转矩阵矩阵外积,左行乘右列代码如下 /// <summary> ///

cocos2d-x-3.x (3)简单改变界面大小

关于界面大小的改变,简单的加入一个操作就行了. glview->setFrameSize(480,480); 加入到这个底下,就是简单的改变屏幕大小.

Raphael.js改变元素层叠顺序

Raphael.js 元素(Element)改变层叠顺序,Raphael.js是一个矢量绘图库兼容svg和vml.初学时感觉css的z-index能搞定,结果是不支持,不过矢量绘图符合dom标准.可以改变dom加载顺序实现想要的结果. 1.看Raphael.js API,有关于改变层叠的方法,但只找到两个互换.查看源码发现有改变dom结构的方法. 2.XML DOM appendChild() 方法 移除原有元素插入到新位置.刚开始以为只新增,不移除原有.走了很多弯路,基础不扎实. 3.Raph