zoukankan      html  css  js  c++  java
  • 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
                  }
            }



  • 相关阅读:
    链表--判断一个链表是否为回文结构
    矩阵--“之”字形打印矩阵
    二叉树——平衡二叉树,二叉搜索树,完全二叉树
    链表--反转单向和双向链表
    codeforces 490C. Hacking Cypher 解题报告
    codeforces 490B.Queue 解题报告
    BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告
    codeforces 488A. Giga Tower 解题报告
    codeforces 489C.Given Length and Sum of Digits... 解题报告
    codeforces 489B. BerSU Ball 解题报告
  • 原文地址:https://www.cnblogs.com/iDouble/p/8584476.html
Copyright © 2011-2022 走看看