鼠標的拖動效果

1、變量的設置
let isDragging = false;
let startX;
let startY;
let endX;
let endY;
let box = null;
  • isDragging : 表示是否推拽
  • startX、startY:表示起始坐標,相對于元素
  • endX、endY:表示結束坐標,相對于元素
  • box:表示要拖動的盒子
2、設置監聽事件

設置監聽事件,并初始化盒子(box

// 為鼠標按下事件設置監聽
titleFile.addEventListener('mousedown', (e) => {box = createFileBox; // 初始化被移動的元素mouseMove(e); // 調用移動鼠標的函數
});
3、移動鼠標
  • 第一次移動
    • 首先判斷是否為第一次移動,如果是第一次移動,那末直接讓初始的位置為當前鼠標的位置。
    • 然后嘗試獲取盒子的位置,并初始化。
  • 非第一次移動
    • 將上一次移動的末位置作為當前的初始位置。
function mouseMove(e){isDragging = true;if(startX  === undefined || startY === undefined) {startX = e.clientX;startY = e.clientY;} else {startX = e.clientX - endX;startY = e.clientY - endY;}let ox = box.style.left;let oy = box.style.top;if(ox === '' || ox === null || oy === '' || oy === null) {box.style.left = '0px';box.style.top = '0px';}
}
3、鼠標移動事件

由于要移動的盒子時使用的相對定位,因此導致坐標不一致,鼠標是根據左上角為原點進行定位,而我的是根據初始位置的中間位置進行定位。因此需要將鼠標的坐標轉化為盒子所在坐標系的坐標。

// 鼠標移動事件
document.addEventListener('mousemove', (e) => {if (isDragging) {e.preventDefault(); // 阻止默認行為// 計算要移動的距離,即,元素元素要移動的距離endX = e.clientX - startX;endY = e.clientY - startY;box.style.left = `${endX}px`;box.style.top = `${endY}px`;}
});
4、鼠標釋放事件
// 鼠標釋放事件
document.addEventListener('mouseup', () => {isDragging = false;
});
5、清理鼠標事件
function mouseClear() {startX = undefined;startY = undefined;endX = undefined;endY = undefined;if(box !== null) {box.style.left = '0px';box.style.top = '0px';}box = null;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/908722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/908722.shtml
英文地址,請注明出處:http://en.pswp.cn/news/908722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SwaggerFuzzer:一款自動化 OpenAPI/Swagger 接口未授權訪問測試工具

SwaggerFuzzer 🌐 一款自動化 OpenAPI/Swagger 接口未授權訪問測試工具🚀 工具介紹:SwaggerFuzzer? 核心功能亮點🚀 快速使用🧰 支持參數 📌 項目結構📥 獲取與下載 🌐 一款自動化 …

文獻閱讀:Exploring Autoencoder-based Error-bounded Compression for Scientific Data

目錄 論文簡介動機:為什么作者想要解決這個問題?貢獻:作者在這篇論文中完成了什么工作(創新點)?規劃:他們如何完成工作?離線訓練階段:在線壓縮階段 理由:通過什么實驗驗證它們的工作…

【業務框架】3C-相機-Cinemachine

概述 插件,做相機需求,等于相機老師傅多年經驗總結的工具 Feature Transform:略Control Camera:控制相機參數Noise:增加隨機性Blend:CameraBrain的混合列表指定一個虛擬相機到另一個相機的過渡&#xff…

設計一個算法:刪除非空單鏈表L中結點值為x的第一個結點的前驅結點

目錄 單鏈表的存儲結構定義如下 快慢指針法 三指針法版本① 三指針法版本② 單鏈表的存儲結構定義如下 typedef struct{Elemtype data;struct Node* next; }LNode,*LinkList; 快慢指針法 void deleteprex(LinkList L, Elemtype e) {if (L NULL || L->next NULL ||…

【Qt】:設置新建類模板

完整的頭文件模板 #ifndef %FILENAME%_H #define %FILENAME%_H/*** brief The %CLASSNAME% class* author %USER%* date %DATE%*/ class %CLASSNAME% { public:%CLASSNAME%();~%CLASSNAME%();// 禁止拷貝構造和賦值%CLASSNAME%(const %CLASSNAME%&) delete;%CLASSNAME%&a…

?**?CID字體?**? 和 ?**?Simple字體?**?

在PDF中,字體類型主要分為 ??CID字體?? 和 ??Simple字體?? 兩大類,它們的主要區別在于編碼方式和適用場景。以下是它們的詳細對比: ??1. CID字體(CID-keyed Fonts)?? CID(Character Identifie…

計組_導學

2025.05.31:老湯講408計組學習筆記 導學 第1章計算機系統概述:對計算機系統有全局的認識第2章總線系統:簡單且獨立,不會依賴其他內容,它是被依賴的第3章主存儲器:只有了解主存儲器的內部結構,才能理解在主存中是如何存儲二進制的第4章數據的表示與運算:各種編碼以及計算…

【GPT模型訓練】第二課:張量與秩:從數學本質到深度學習的基礎概念解析

這里寫自定義目錄標題 張量(Tensor)的定義關鍵特點:示例: 張量的秩(Rank)示例:“秩”的拼音常見混淆點 總結 張量(Tensor)的定義 在數學和物理學中,張量是一…

RabbitMQ work模型

Work 模型是 RabbitMQ 最基礎的消息處理模式,核心思想是 ??多個消費者競爭消費同一個隊列中的消息??,適用于任務分發和負載均衡場景。同一個消息只會被一個消費者處理。 當一個消息隊列綁定了多個消費者,每個消息消費的個數都是平攤的&a…

【Linux操作系統】基礎開發工具(yum、vim、gcc/g++)

文章目錄 Linux軟件包管理器 - yumLinux下的三種安裝方式什么是軟件包認識Yum與RPMyum常用指令更新軟件安裝與卸載查找與搜索清理緩存與重建元數據 yum源更新1. 備份現有的 yum 源配置2. 下載新的 repo 文件3. 清理并重建緩存 Linux編輯器 - vim啟動vimVim 的三種主要模式常用操…

73常用控件_QFormLayout的使用

目錄 代碼?例: 使? QFormLayout 創建表單. 除了上述的布局管理器之外, Qt 還提供了 QFormLayout , 屬于是 QGridLayout 的特殊情況, 專 ??于實現兩列表單的布局. 這種表單布局多?于讓??填寫信息的場景. 左側列為提?, 右側列為輸?框 代碼?例: 使? QFormLayout 創…

蘭亭妙微 | 醫療軟件的界面設計能有多專業?

從醫療影像系統到手術機器人控制界面,從便攜式病原體檢測設備到多平臺協同操作系統,蘭亭妙微為眾多醫療設備研發企業,打造了兼具專業性與可用性的交互界面方案。 我們不僅做設計,更深入理解醫療場景的實際需求: 對精…

鴻蒙開發修改版本幾個步驟

鴻蒙開發修改版本幾個步驟 比如:5.0.4(16)版本改為5.0.2(14)版本 一、項目下的build-profile.json5 "products": [{"name": "default","signingConfig": "default&qu…

Flask 基礎與實戰概述

一、Flask 基礎知識 什么是 Flask? Flask 是一個基于 Python 的輕量級 Web 框架(微框架)。 特點:核心代碼簡潔,給予開發者更多選擇空間。 與 Django 對比: Django 創建空項目生成多個文件,Flask 僅需一個文件即可實現簡單應用(如 "Hello, World!")。 Flask …

Linux安全加固:從攻防視角構建系統免疫

Linux安全加固:從攻防視角構建系統免疫 構建堅不可摧的數字堡壘 引言:攻防對抗的新紀元 在日益復雜的網絡威脅環境中,Linux系統安全已從被動防御轉向主動免疫。2023年全球網絡安全報告顯示,高級持續性威脅(APT)攻擊同比增長65%,平均入侵停留時間縮短至48小時。本章將從…

Java嚴格模式withResolverStyle解析日期錯誤及解決方案

在Java中使用DateTimeFormatter并啟用嚴格模式(ResolverStyle.STRICT)時,解析日期字符串"2025-06-01"報錯的根本原因是:模式字符串中的年份格式yyyy被解釋為YearOfEra(紀元年份),而非…

Java中的泛型底層是怎樣的

Java 泛型深入底層原理解析:類型擦除與橋方法的真相 一、Java中的偽泛型 Java 從 JDK 1.5 引入泛型之后,大大提升了代碼的類型安全性與可讀性。但泛型的底層實現并不像 C 的模板機制那樣是“真正的泛型”,Java 的泛型是偽泛型,在…

Spring Boot 從Socket 到Netty網絡編程(上):SOCKET 基本開發(BIO)與改進(NIO)

前言 無論是軟件還是硬件的本質都是要解決IO問題(輸入、輸出),再說回網絡編程本質上都是基于TCP/UP的開發,socket是在此基礎上做的擴展與封裝,而Netty又是對socket做的封裝。本文旨在通過相關案例對socket進行探討。 一…

【大模型LLM學習】function call/agent學習記錄

【大模型LLM學習】function call/agent學習記錄 0 前言1 langchain實現function call2 調用本地模型3 微調本地模型3.1 few-shot調用Claude生成Q-A對3.2 tools格式3.3 agent微調格式3.4 swift微調 p.s. 0 前言 記錄一下使用langchain做簡單的function call/agent(或者說意圖識別…