首页 > 其他分享 >原生实现拖动

原生实现拖动

时间:2023-12-19 16:45:04浏览次数:34  
标签:原生 style oEvent 拖动 px oNewDiv 实现 var document

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>原生JS实现拖拽位置预览</title>
    <style>
        .box {position: absolute;border: 1px dashed black;}
        #div1 {width: 100px;height: 100px;background: yellow;position: absolute;}
        #div2 {width: 100px;height: 100px;background: orange;position: absolute;}
    </style>
    
</head>

<body>
    <div id="div1"></div>
     <div id="div2"></div>
     
     <script>
         window.onload = function () {
     
            var oDiv = document.getElementById('div1');
             var oDiv02 = document.getElementById('div2');
            var oDivJH = document.querySelectorAll('div');
            console.log( oDivJH );
            
     
            oDiv.onmousedown = function (ev) {
     
                 var oEvent = ev || event;
                 var disX = oEvent.clientX - oDiv.offsetLeft;
                 var disY = oEvent.clientY - oDiv.offsetTop;
     
                 //创建一个虚线框的div
                 var oNewDiv = document.createElement('div');
     
                 oNewDiv.className = 'box';
                 //减去边框的大小与原div大小重合
                 oNewDiv.style.width = oDiv.offsetWidth - 2 + 'px';
                 oNewDiv.style.height = oDiv.offsetHeight - 2 + 'px';
                 oNewDiv.style.left = oDiv.offsetLeft + 'px';
                 oNewDiv.style.top = oDiv.offsetTop + 'px';
     
                 document.body.appendChild(oNewDiv);
     
                 document.onmousemove = function (ev) {
     
                     var oEvent = ev || event;
     
                     oNewDiv.style.left = oEvent.clientX - disX + 'px';
                     oNewDiv.style.top = oEvent.clientY - disY + 'px';
                 };
     
                 document.onmouseup = function () {
     
                     document.onmousemove = null;
                     document.onmouseup = null;
     
                     oDiv.style.left = oNewDiv.style.left;
                     oDiv.style.top = oNewDiv.style.top;
                     //移除虚线框
                     document.body.removeChild(oNewDiv);
                 };
             };
             
        
            oDiv02.onmousedown = function (ev) {
             
                 var oEvent = ev || event;
                 var disX = oEvent.clientX - oDiv02.offsetLeft;
                 var disY = oEvent.clientY - oDiv02.offsetTop;
             
                 //创建一个虚线框的div
                 var oNewDiv = document.createElement('div02');
             
                 oNewDiv.className = 'box';
                 //减去边框的大小与原 div大小重合
                 oNewDiv.style.width = oDiv02.offsetWidth - 2 + 'px';
                 oNewDiv.style.height = oDiv02.offsetHeight - 2 + 'px';
                 oNewDiv.style.left = oDiv02.offsetLeft + 'px';
                 oNewDiv.style.top = oDiv02.offsetTop + 'px';
             
                 document.body.appendChild(oNewDiv);
             
                 document.onmousemove = function (ev) {
                     var oEvent = ev || event;
                     oNewDiv.style.left = oEvent.clientX - disX + 'px';
                     oNewDiv.style.top = oEvent.clientY - disY + 'px';
                 };
             
                 document.onmouseup = function () {
                     document.onmousemove = null;
                     document.onmouseup = null;
                     oDiv02.style.left = oNewDiv.style.left;
                     oDiv02.style.top = oNewDiv.style.top;
                     //移除虚线框
                     document.body.removeChild(oNewDiv);
                 };
             };
      
         };
     </script
</body>

</html>

 

标签:原生,style,oEvent,拖动,px,oNewDiv,实现,var,document
From: https://www.cnblogs.com/jiunie/p/17914132.html

相关文章

  • Flutter 用PageView实现轮播
    import'package:flutter/material.dart';classPageSwiperextendsStatefulWidget{constPageSwiper({super.key});@overrideState<PageSwiper>createState()=>_PageSwiperState();}class_PageSwiperStateextendsState<PageSwi......
  • 实现 Raft 协议
    文章地址简介Raft是一个分布式共识算法,用于保证所有机器对一件事达成一个看法。本文用于记录实现Raft选举和日志复制的代码细节。选举节点启动时首先是跟随者状态,如果到达选举超时时间就尝试选举,为了预防对称网络分区带来的任期不断增加问题,需要使用预投票机制。选举超时......
  • 使用XPath进行网页爬取的Python实现
    XPath是一种用于在XML和HTML文档中进行导航和查询的语言。在网页爬取中,XPath可以帮助我们定位和提取特定的网页元素,从而实现数据的抓取和提取。本文将介绍如何使用Python中的XPath库来进行网页爬取。1.安装依赖库:在使用XPath进行网页爬取之前,我们需要安装相关的依赖库。Python中常......
  • 无需散热片实现高达99.2%的效率
    MOTORDRIVERSBridgeSwitch•无需散热片实现高达99.2%的效率•完全集成的半桥电路•硬件方式实现的保护功能简化了软件•通过单线总线进行器件和系统诊断•可与流行的电机控制微控制器配合使用高压,自供电,半桥式电机驱动©2021PowerIntegrations|power.com应用......
  • Git — husky + eslint 实现提交前校验与规范提交
    node版本:=14.21.3||>16.0.0一、配置ESlint1.1安装eslintnpminstalleslint-D1.2初始化eslint,生成配置文件npxeslint--init1.3在编辑器安装ESlint插件1.4通过执行命令检测文件代码规范#./src为需要检测的文件路径npxeslint./src二、配置husky2.1安......
  • java的8种异步实现方式
    异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:发送短信、邮件、异步更新等,这些都是典型的可以通过异步实现的场景。异步的八种实现方式线程ThreadFuture异步框架CompletableFutureSpring注解@A......
  • Vue+Node实现大文件上传和断点续传
    源代码断点续传、分片上传、秒传、重试机制文件上传是开发中的难点,大文件上传及断点续传难点中的细节及核心技术点。 element-ui框架的上传组件,是默认基于文件流的。数据格式:form-data;传递的数据:file文件流信息;filename文件名字通过fileRead.readAsDataURL(file)......
  • php mvc框架怎么实现路由的?
    都知道路由是实现框架重要的一步。如果对怎么实现框架感兴趣那必须要了解,而且对自己对正则表达是更加深刻了解。m----------模型v-----------视图c-----------控制器mvc模式就不想多说,网上解释的一大堆,各种理解。这个标准还是比较宽松的,看自己怎么理解。本文重点是是......
  • 新形势下,如何实现企业财务团队的转型?
    随着我国企业逐渐朝着集团化、国际化的方向发展,越来越多的企业希望通过自身的转型来降低成本输出,提高运营效率。事实上,财务转型的本质是通过优化企业本身的财务管理方式和流程来实现财务团队更高效的运作。尤其是在当下世界经济飞速发展时期,每一次变化都会改变与财务相关的数据信息......
  • drf( Restful规范——序列化与反序列化——DjangoRESTframewordk用法——原生与drf实
    #Restful规范(重要-概念)```python#API接口---》后端要提供api接口---》2000年RoyFielding的博士论文中###restful是什么?REST全称是RepresentationalStateTransfer,表征性状态转移WebAPI接口的设计风格,尤其适用于前后端分离的应用模式中#有哪些规范10条 1数据的安全......