JS实现基于拖拽改变物体大小的方法


Posted in Javascript onJanuary 23, 2018

本文实例讲述了JS实现基于拖拽改变物体大小的方法。分享给大家供大家参考,具体如下:

拖拽改变物体大小功能:拖拽黄色小div来改变绿色大div的宽和高

JS实现基于拖拽改变物体大小的方法

主要实现由三大步:

1. 通过id获取到大小两个div
2. 给小div添加onmousedown事件
3. 在onmousedown事件给document添加onmousemoveonmouseup事件

JS实现基于拖拽改变物体大小的方法

由分析图可知,我们只需要在拖拽的时候,获取到物体不断增加的宽度值,问题就解决了

<div id="panel">
  <div id="dragIcon"></div>
</div>

加些样式

<style>
    #panel{
      position: absolute;
      width: 200px;height: 200px;
      background: green;
    }
    #dragIcon{
      position: absolute;bottom: 0;right: 0;
      width: 20px;height: 20px;
      background: yellow;
    }
</style>

js实现代码:

<script>
  window.onload = function () {
    // 1. 获取两个大小div
    var oPanel = document.getElementById('panel');
    var oDragIcon = document.getElementById('dragIcon');
    // 定义4个变量
    var disX = 0;//鼠标按下时光标的X值
    var disY = 0;//鼠标按下时光标的Y值
    var disW = 0; //拖拽前div的宽
    var disH = 0; // 拖拽前div的高
    //3. 给小div加点击事件
    oDragIcon.onmousedown = function (ev) {
      var ev = ev || window.event;
      disX = ev.clientX; // 获取鼠标按下时光标x的值
      disY = ev.clientY; // 获取鼠标按下时光标Y的值
      disW = oPanel.offsetWidth; // 获取拖拽前div的宽
      disH = oPanel.offsetHeight; // 获取拖拽前div的高
      document.onmousemove = function (ev) {
        var ev = ev || window.event;
        //拖拽时为了对宽和高 限制一下范围,定义两个变量
        var W = ev.clientX - disX + disW;
        var H = ev.clientY - disY + disH;
        if(W<100){
          W = 100;
        }
        if(W>800){
          W =800;
        }
        if(H<100){
          H = 100;
        }
        if(H>500){
          H = 500;
        }
        oPanel.style.width =W +'px';// 拖拽后物体的宽
        oPanel.style.height = H +'px';// 拖拽后物体的高
      }
      document.onmouseup = function () {
        document.onmousemove = null;
        document.onmouseup = null;
      }
    }
  }
</script>

效果图:

JS实现基于拖拽改变物体大小的方法

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Javascript Function对象扩展之延时执行函数
Jul 06 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
Jun 14 Javascript
理解Javascript的动态语言特性
Jun 17 Javascript
Bootstrap树形组件jqTree的简单封装
Jan 25 Javascript
JavaScript字符串检索字符的方法
Jun 23 Javascript
微信小程序picker组件下拉框选择input输入框的实例
Sep 20 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 Javascript
vue router 跳转时打开新页面的示例方法
Jul 28 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
Apr 03 Javascript
记一次用ts+vuecli4重构项目的实现
May 21 Javascript
详解vue修改elementUI的分页组件视图没更新问题
Nov 13 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 #Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
Jan 23 #Javascript
实时监控input框,实现输入框与下拉框联动的实例
Jan 23 #Javascript
从parcel.js打包出错到选择nvm的全部过程
Jan 23 #Javascript
浅谈vue项目重构技术要点和总结
Jan 23 #Javascript
bootstrap fileinput插件实现预览上传照片功能
Jan 23 #Javascript
php 解压zip压缩包内容到指定目录的实例
Jan 23 #Javascript
You might like
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
js自带函数备忘 数组
2006/12/29 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
python实现的各种排序算法代码
2013/03/04 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
python数字类型math库原理解析
2020/03/02 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
中国跨境在线时尚零售商:Bellelily
2018/04/06 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
促销活动总结怎么写
2014/06/25 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
住房公积金贷款工资证明
2015/06/12 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS
vue使用element-ui按需引入
2022/05/20 Vue.js