JS拖拽(改变物体大小)

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

主要实现由三大步:

1. 通过id获取到大小两个div

2. 给小div添加onmousedown事件

3. 在onmousedown事件给document添加onmousemove和onmouseup事件

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

<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>
<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>

效果图:

时间: 2024-10-04 14:13:16

JS拖拽(改变物体大小)的相关文章

一步一步实现JS拖拽插件

js拖拽是常见的网页效果,本文将从零开始实现一个简单的js插件. 一.js拖拽插件的原理 常见的拖拽操作是什么样的呢?整过过程大概有下面几个步骤: 1.用鼠标点击被拖拽的元素 2.按住鼠标不放,移动鼠标 3.拖拽元素到一定位置,放开鼠标 这里的过程涉及到三个dom事件:onmousedown,onmousemove,onmouseup.所以拖拽的基本思路就是: 1.用鼠标点击被拖拽的元素触发onmousedown (1)设置当前元素的可拖拽为true,表示可以拖拽 (2)记录当前鼠标的坐标x,y

拖拽改变元素位置或大小bug修复

<!doctype html><html><head>   <meta charset="utf-8">   <title>无标题文档</title><style>body{   background:#000;}.upshop-view{   width:320px;   height:499px;   background:#fff;   background-size:contain;   pos

浏览器兼容的实现table中通过拖拽改变列宽的最佳实践

在企业级应用中,表格是非常常见的展现方式,这时当列数据较长时,一种比较自然,体验也较好的处理方式就是通过拖拽改变列宽,这个功能在一些重量级JS组件库中都有提供,实现原理各有不同,但是一个共同点就是实现比较复杂,那我们通过很少的代码,常规的table结构,能实现这个功能么?本文将提供一个经过实际验证的实践,供开发者参考,扩展思路. 总体思路: 1.HTML结构: 为了简化代码,采用标准的HTML结构,即table-tr-td模式,无其他限制,在我们的实际应用中,表格非常复杂,但是核心技术没有变:

拖拽改变元素位置或大小

<!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title><style>body{ background:#000;}.upshop-view{ width:320px; height:499px; background:#fff; background-size:contain; position:relative; z-

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

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

js拖拽效果实现

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head>    <meta

React.js实现原生js拖拽效果及思考

一.起因&思路 不知不觉,已经好几天没写博客了...近来除了研究React,还做了公司官网... 一直想写一个原生js拖拽效果,又加上近来学react学得比较嗨.所以就用react来实现这个拖拽效果. 首先,其实拖拽效果的思路是很简单的.主要就是三个步骤: 1.onmousedown的时候,启动可拖拽事件,记录被拖拽元素的原始坐标参数. 2.onmousemove的时候,实时记录鼠标移动的距离,结合被拖拽元素第一阶段的坐标参数,计算并设置新的坐标值. 3.onmouseup的时候,关闭可拖拽事件

JQuery拖拽改变元素的尺寸

"元素拖拽改变大小"其实和"元素拖拽"一个原理,只是所动态改变的对象不同而已,主要在于 top.left.width.height 的运用,相对实现起来也非常容易.以下附出源码原型,弄明白了原理再扩展其他实际应用,思路就变得简单.清晰得多了.先来看看效果:塔河县臧清机械 下面是 JavaScript Code view source print? 01 <script type="text/javascript"> 02     /*

再谈React.js实现原生js拖拽效果

前几天写的那个拖拽,自己留下的疑问...这次在热心博友的提示下又修正了一些小小的bug,也加了拖拽的边缘检测部分...就再聊聊拖拽吧 一.不要直接操作dom元素 react中使用了虚拟dom的概念,目地就是要尽量避免直接操作dom元素,所以我们在对dom元素进行操作的时候需要注意,我之前为了获取form的参数就直接用了var dragBox=document.getElementById('form')去找dom,但是其实记录from的初始位置,可以在其子组件更新父组件参数的时候调用.即在MyF