首页 > 其他分享 >原生js元素拖动效果

原生js元素拖动效果

时间:2024-10-09 16:35:40浏览次数:1  
标签:原生 鼠标 拖动 top js note noteRect var left

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>可拖动的便笺</title>
    <link rel="stylesheet" href="./css/index.css" />
  </head>
  <body>
    <div class="note">
      <div class="move-bar"></div>
      <div class="content" contenteditable="">
        <p>这是一个便笺</p>
        <p>里面的文字可以更改</p>
        <p>用鼠标按住顶部的移动条即可拖动便笺</p>
      </div>
    </div>

    <script src="./js/index.js"></script>
  </body>
</html>
// 让便签可被拖动,但不能超出视口

var note = document.querySelector('.note');
var moveBar = document.querySelector('.move-bar');

moveBar.onmousedown = function(event){
    var startX = event.clientX; //鼠标按下的开始 离视口的左边位置
    var startY = event.clientY;//鼠标按下的开始 离视口的头部位置
    var noteRect = note.getBoundingClientRect();
    console.log(noteRect)
    console.log(note.clientWidth)
    console.log(note.clientHeight)
    var maxX = document.documentElement.clientWidth - note.clientWidth;
    var maxY = document.documentElement.clientHeight - note.clientHeight;
    window.onmousemove = function(e){
        var endX = e.clientX;//鼠标移动 离视口的左边位置
        var endY = e.clientY;//鼠标移动 离视口的头部位置
        var offsetX = endX - startX; //最终的偏移量
        var offsetY = endY - startY; //最终的偏移量
        var left = noteRect.left + offsetX;
        var top = noteRect.top + offsetY;
        if(left < 0){
            left = 0
        }
        if(top<0){
            top = 0
        }
        if(left > maxX){
            left = maxX;
        }
        if(top > maxY){
            top = maxY;
        }
        // note.style.left = noteRect.left + offsetX + 'px';
        // note.style.top = noteRect.top + offsetY + 'px';
        note.style.left = left + 'px';
        note.style.top = top + 'px';
        console.log("startX:"+startX,"startY"+startY,"endX:"+endX,"endY:"+endY,"offsetX:"+offsetX,"offsetY:"+offsetY);
        console.log("left:"+left,"top:"+top);
    }
    window.onmouseup = function(){
        //鼠标抬起时清除事件
        window.onmousemove = null;
        window.onmouseup = null;
    }
}

 

标签:原生,鼠标,拖动,top,js,note,noteRect,var,left
From: https://www.cnblogs.com/nianzhilian/p/18454564

相关文章

  • Hive(六)JSON函数
    概念什么是JSONJSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成JSON是存储和交换文本信息的语法,类似XMLJSON比XML更小、更快,更易解析JSON语法数据在名称/值对中数据由,分开使用斜杠\来转义字符大括号{}保存对象......
  • 基于nodejs+vue易逛漫展[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着动漫文化的日益普及,漫展作为一种集动漫展示、互动体验、商品交易于一体的综合性文化活动,受到了广大动漫爱好者的热烈追捧。然而,传统的漫展参与方式往往......
  • 基于nodejs+vue易买电商管理网站[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,电子商务已成为现代商业活动的重要组成部分。易买电商管理网站作为电子商务领域的一个重要应用,旨在提供一个高效、便捷、安全的在......
  • 基于nodejs+vue易行汽车租赁平台[开题+源码+程序+论文]计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着城市化进程的加速和人们生活水平的提高,汽车租赁作为一种便捷、灵活的出行方式,日益受到广大消费者的青睐。近年来,我国汽车租赁市场呈现出蓬勃发展的态势,......
  • java Gzip将json压缩成byte数组
    `importorg.apache.commons.lang3.StringUtils;importjava.io.*;importjava.nio.charset.StandardCharsets;importjava.util.Arrays;importjava.util.zip.GZIPInputStream;importjava.util.zip.GZIPOutputStream;publicclassTestController{publicsta......
  • JS实现文件夹的上传和下载
    前端:vue2,vue3,vue-cli,html5,webuploader后端:asp.net,jsp,springboot,php,数据库:MySQL,Oracle,SQLServer,达梦,人大金仓,国产数据库功能:超大文件上传,文件和文件夹批量上传,断点续传,加密上传,视频上传技术:百度webuploader,分块,切片,断点续传,秒传,MD5验证,纯JS实现,支持第三方......
  • js常用校验规则
    一、校验数字的js正则表达式1数字:[1]$2n位的数字:^\d{n}$3至少n位的数字:^\d{n,}$4m-n位的数字:^\d{m,n}$5零和非零开头的数字:^(0|[1-9][0-9])$6非零开头的最多带两位小数的数字:^([1-9][0-9])+(.[0-9]{1,2})?$7带1-2位小数的正数或负数:^(-)?\d+(.\d{1,2})?$8正数、负......
  • js常用校验规则2
    1.1、校验是否为空(null/空串)/*校验是否为空(null/空串)*/varcheckNull=function(str){if(str==null||str==""){returnfalse;}returntrue;}1.2、校验是否为纯数字/*校验是否为纯数字js的isNaN函数*/varcheckNum=function(num){if(isNaN(num)){......
  • 【Next.js 入门教程系列】01-基础知识
    原文链接CSDN的排版/样式可能有问题,去我的博客查看原文系列吧,觉得有用的话,给我的库点个star,关注一下吧 基础知识本篇包括以下内容:Next.js是什么创建Next.js项目客户端组件和服务器端组件数据获取缓存静态渲染与动态渲染Next.js​Next.jsisa framework forb......
  • js基础篇一
    JavaScripthtml骨架CSS血肉js行为JavaScript:是一种运行在客户端(浏览器)的一种编程语言,实现人机交互弱类型的语言作用:网页的特效表单验证数据交互(ajax)js书写的位置行内写在开始标签里内部写在script标签里(写在</body>的前面)因为代码是从上向......