javascript--滑鼠拖拽視窗案例(滑鼠按下,在滑鼠移動過程中,盒子跟著一起移動,滑鼠鬆開,盒子停止移動)

来源:https://www.cnblogs.com/WangYujie1994/archive/2019/01/11/10254182.html
-Advertisement-
Play Games

界面如圖所示: 要求:在“信息註冊”欄,按下滑鼠,然後滑鼠在頁面移動,在滑鼠移動過程中,該視窗跟著滑鼠移動,當滑鼠鬆開的時候,視窗停止移動。點擊“關閉”,該視窗隱藏。 實現思路: 1.頁面結構分析:一個大盒子d-box來確定位置,裡面放一個小盒子drop(存放“註冊信息(可以拖拽”文字和span標簽 ...


界面如圖所示:

要求:在“信息註冊”欄,按下滑鼠,然後滑鼠在頁面移動,在滑鼠移動過程中,該視窗跟著滑鼠移動,當滑鼠鬆開的時候,視窗停止移動。點擊“關閉”,該視窗隱藏。

實現思路:

1.頁面結構分析:一個大盒子d-box來確定位置,裡面放一個小盒子drop(存放“註冊信息(可以拖拽”文字和span標簽,span存放“關閉”,id為box_close),滑鼠在drop中按下,移動時候d-box跟著移動。

2.實現分析:

   2.1 獲取滑鼠在盒子中的位置。通過滑鼠在頁面中的位置-盒子在頁面的位置實現

       ①滑鼠在頁面的位置實現代碼:

       var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft); 

       var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop); 

  ②盒子在頁面中位置實現代碼:

    var box_x=box.offsetLeft; 

    var box_y=box.offsetTop; 

  ③滑鼠在盒子中的位置實現代碼:

    var mouse_in_box_x=x-box_x; 

    var mouse_in_box_y=y-box_y; 

  2.2 獲取滑鼠移動時盒子移動的位置。通過滑鼠移動時,滑鼠在頁面的位置-滑鼠在盒子中的位置實現。

    ①滑鼠在頁面的位置

      var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft); 

      var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop); 

  ②滑鼠移動時盒子移動的位置代碼實現:

   var boxX=x-mouse_in_box_x; 

      var boxY=y-mouse_in_box_y; 

   2.3 給盒子樣式賦值

   box.style.left=boxX+'px';

      box.style.top=boxY+'px'; 

3.註意:

①要移動的盒子,其pisition必須賦值,absolute或者relative,必須使其脫離文檔流才能移動

②給盒子樣式賦值時,一定要註意不能丟掉px單位

③事件對象e,位置e.pageX,滾動條滾動距離的相容性。以前的博文裡面有記錄,完整代碼中也做了處理。

完整代碼如下:

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title>滑鼠拖拽案例</title>
 6         
 7         <style type="text/css">
 8             *{
 9                 margin: 0px;
10                 padding: 0px;
11             }
12             
13             .d-box{
14                 width: 400px;
15                 height: 300px;
16                 border: 5px solid #eee;
17                 box-shadow: 2px 2px 2px 2px #666;
18                 position: absolute;
19                 top: 40%;
20                 left: 40%;
21                 background-color: white;
22             }
23             
24             .hd{
25                 height: 25px;
26                 background-color: #7c9299;
27                 color: white;
28                 line-height: 25px;
29                 cursor: move;
30                 border-bottom: 1px solid #369;
31             }
32             #box_close{
33                 float: right;
34                 cursor: pointer;
35             }
36         </style>
37     </head>
38     <body>
39         <div id="d-box" class="d-box">
40             <div id="drop" class="hd">註冊信息(可以拖拽)
41                 <span id="box_close">【關閉】</span>
42             </div>
43         </div>
44         
45         <!-- 插入JS代碼 -->
46         <script type="text/javascript">
47             /****************************盒子拖拽功能********************************/ 
48             //點擊拖拽的“註冊信息欄”,拖動整個盒子的移動。首先獲得要拖拽的盒子
49             var box=document.getElementById('d-box');
50             var drop=document.getElementById('drop');
51             drop.onmousedown=function(e){
52                 e = e || window.event;
53                 //當滑鼠按下的時候,獲得滑鼠在盒子中的位置
54                 //滑鼠在盒子中的位置=滑鼠在頁面中的位置-盒子在頁面的位置
55                 //滑鼠在頁面中的位置
56                 var x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
57                 var y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
58                 
59                 //盒子在頁面中的位置
60                 var box_x=box.offsetLeft;
61                 var box_y=box.offsetTop;
62                 //滑鼠在盒子中的位置
63                 var mouse_in_box_x=x-box_x;
64                 var mouse_in_box_y=y-box_y;
65                 
66                 //註冊滑鼠移動事件,因為滑鼠按下後,在頁面移動,盒子跟著移動
67                 document.onmousemove=function(e){
68                     e = e || window.event;
69                     //滑鼠在頁面中移動時,求盒子的坐標
70                     //滑鼠移動時盒子移動位置=滑鼠當前位置-滑鼠在盒子中移動的距離
71                      x=e.pageX || e.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
72                      y=e.pageY || e.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
73                     
74                     var boxX=x-mouse_in_box_x;
75                     var boxY=y-mouse_in_box_y;
76                     //px一定不能忘
77                     box.style.left=boxX+'px';
78                     box.style.top=boxY+'px';
79                 }
80             }
81             
82             //當滑鼠彈起時,移出滑鼠移動事件
83             drop.onmouseup=function(){
84                 document.onmousemove=null;
85             }
86             
87             //點擊關閉盒子,隱藏盒子
88             var box_close=document.getElementById('box_close');
89             box_close.onclick=function(){
90                 box.style.display='none';
91             }
92         </script>
93     </body>
94 </html>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.JavaScript 語句 JavaScript 語句是發給瀏覽器的命令。 這些命令的作用是告訴瀏覽器要做的事情。 2.分號 ; 分號用於分隔 JavaScript 語句。 通常我們在每條可執行的語句結尾添加分號。 使用分號的另一用處是在一行中編寫多條語句。 案例: 3.JavaScript 代 ...
  • 書接上文,我們繼續開發。 1.界面設計 首先我先用PS設計出如圖1的播放器界面。詳細設計步驟不再表述,這是美工的主要工作,下麵我主要講解一下切圖工作,這部分工作我認為還是自己動手比較合適,美工不知道我們的需求,也不知道怎麼切割符合我們的要求,所以要親自動手。掌握一些圖片設計工具還是十分有必要的 我們 ...
  • 1.JavaScript 語法 JavaScript 是一個腳本語言。 它是一個輕量級,但功能強大的編程語言 2.JavaScript 字面量 在編程語言中,一般固定值稱為字面量,如 3.14。 數字(Number)字面量 可以是整數或者是小數,或者是科學計數(e); 字元串(String)字面量 ...
  • 註:本人小白一個,目前還在校學習,這次老師讓做的項目需要用到這個功能,所以花了一些時間搞了一下,本次案列實現功能為 用戶註冊信息,如果資料庫對應表中存在部分信息,點擊已有的用戶的用戶名,自動補全其它已有的基本信息 實現思路:通過AutoComplete提示,非同步通過用戶名查詢全表,充當AutoCom ...
  • js中this指向是一個難點,花了很長時間來整理和學習相關的知識點。 一、 this this是JS中的關鍵字, 它始終指向了一個對象, this是一個指針; 參考博文: 1. "JavaScript函數中的this四種綁定形式" 2. "this指向及改變this指向的方法" 二、 this顯示綁 ...
  • 為input 添加 readonly=”readonly” UNSELECTABLE="on" 屬性。 IE中設置了readonly=”readonly”,點擊使用日期選擇器時input框中仍然出現了游標,添加 UNSELECTABLE=”on”後,消失。 ...
  • JS實現下拉菜單的功能,實際使用中記得用CSS,性能和代碼都好 ...
  • Datatables是一款jquery表格插件。它是一個高度靈活的工具,可以將任何HTML表格添加高級的交互功能。 官網地址:https://datatables.net/ 中文說明地址:http://www.datatables.club/ 功能說明 分頁,即時搜索和排序幾乎支持任何數據源:DOM ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...