1. 程式人生 > >JS 實現控制元件拖拽/拖動

JS 實現控制元件拖拽/拖動

下面是實現控制元件拖拽的完整程式碼。

(function ($) {
    var move = false;           //標記控制元件是否處於被拖動狀態
    var dragOffsetX = 0;        //控制元件左邊界和滑鼠X軸的差
    var dragOffsetY = 0;        //控制元件上邊界和滑鼠Y軸的差
    var dragObj = null;         //用於儲存當前物件

    $.fn.mydrag = function () {
        dragObj = this;

        this.mousedown(function (e) {
            move = true;

            //獲取滑鼠和該控制元件的位置偏移量,並存入全域性變數供後續呼叫
            dragOffsetX = e.clientX - e.currentTarget.offsetLeft;
            dragOffsetY = e.clientY - e.currentTarget.offsetTop;
        });

        $(document).mousemove(function (e) {
            if (move) {
                //不斷獲取滑鼠新的座標,並計算出控制元件的新座標
                var newX = e.clientX - dragOffsetX;
                var newY = e.clientY - dragOffsetY;

                //邊界控制,document.documentElement.clientWidth:可見區域寬度  document.documentElement.clientHeight:可見區域高度
                newX = newX < 0 ? 0 : newX;
                newY = newY < 0 ? 0 : newY;
                newX = newX > (document.documentElement.clientWidth - dragObj.outerWidth()) ? (document.documentElement.clientWidth - dragObj.outerWidth()) : newX;
                newY = newY > (document.documentElement.clientHeight - dragObj.outerHeight()) ? (document.documentElement.clientHeight - dragObj.outerHeight()) : newY;

                //把新的座標重新賦值給控制元件
                dragObj.css({ left: newX + "px", top: newY + "px", position: 'absolute' });
            }
        });

        $(document).mouseup(function () {
            if (move) {
                move = false;
            }
        });
    };
})(jQuery);

使用方法:

1、建一個js檔案,將上述程式碼貼進去。

2、將該js檔案引入頁面。

3、呼叫方法:$("#id").mydrag();

或者還可以用下面這個外掛替換上面這個外掛,用法完全一樣,效果有一點點不一樣,可以自己體會。

(function ($) {
    var dragOffsetX = 0;        //控制元件左邊界和滑鼠X軸的差
    var dragOffsetY = 0;        //控制元件上邊界和滑鼠Y軸的差

    $.fn.mydrag = function () {
        this.mousedown(function (e) {
            //獲取滑鼠和該控制元件的位置偏移量,並存入全域性變數供後續呼叫
            dragOffsetX = e.clientX - e.currentTarget.offsetLeft;
            dragOffsetY = e.clientY - e.currentTarget.offsetTop;
        });

        this[0].ondragend = this[0].ondrag = function (e) {
            //不斷獲取滑鼠新的座標,並計算出控制元件的新座標
            var newX = e.clientX - dragOffsetX;
            var newY = e.clientY - dragOffsetY;

            //邊界控制,document.documentElement.clientWidth:可見區域寬度  document.documentElement.clientHeight:可見區域高度
            newX = newX < 0 ? 0 : newX;
            newY = newY < 0 ? 0 : newY;
            newX = newX > (document.documentElement.clientWidth - this.width) ? (document.documentElement.clientWidth - this.width) : newX;
            newY = newY > (document.documentElement.clientHeight - this.height) ? (document.documentElement.clientHeight - this.height) : newY;

            //把新的座標重新賦值給控制元件
            $(this).css({ left: newX + "px", top: newY + "px", position: 'absolute' });
        };
    };
})(jQuery);


相關推薦

JS 實現控制元件/

下面是實現控制元件拖拽的完整程式碼。 (function ($) { var move = false; //標記控制元件是否處於被拖動狀態 var dragOffsetX = 0; //控制元件左邊界和滑鼠X軸的差

C#如何實現控制元件移動

1 //在picturebox滑鼠移動 2 private void picBox_MouseMove(object sender, MouseEventArgs e) 3 { 4 if (MoveFlag) 5 { 6 picBox.Left += Convert.To

安卓實現任意控制元件view可,並監聽和點選事件,可自動拉回螢幕邊緣

因為專案中有需要實現控制元件可任意拖拽的需求,所以簡單寫了個自定義OnTouchListener,以作拋磚引玉,歡迎大家提議反饋。 完整實現類如下,程式碼中有詳細註釋: 使用者可以決定是否開啟自動拖拽邊緣功能,可以監聽控制元件的拖拽和點選事件 public cl

C#實現窗體、不允許窗體、任意控制元件執行時

1、不允許窗體被拖動。即使點選藍色標題條。        程式碼片段,加入不想被拖動的窗體中即可         protectedoverridevoid WndProc(refMessage m)         {             base.WndProc(ref m);           

WPF實現控制元件

實現控制元件拖動的基本原理是對滑鼠位置的捕獲,同時根據滑鼠按鍵的按下、釋放確定控制元件移動的幅度和時機。 簡單示例: 在Grid中有一個Button,通過滑鼠事件改編Button的Margin屬性,

在WPF中的Canvas上實現控制元件、縮放

   如題,專案中需要實現使用滑鼠拖動、縮放一個矩形框,WPF中沒有現成的,那就自己造一個輪子:)    造輪子前先看看Windows自帶的畫圖工具中是怎樣做的,如下圖:      在被拖動的矩形框四周有9個小框,可以從不同方向拖動來放大縮小矩形框,另外需要注意的是,還有一

WPF 控制元件庫——可選項卡的TabControl

一、先看看效果 二、原理 1、選項卡大小和位置   這次給大家介紹的控制元件是比較常用的TabControl,網上常見的TabControl樣式有很多,其中一部分也支援拖動選項卡,但是帶動畫效果的很少見。這也是有原因的,因為想要做一個不失原有功能,還需要新增動畫效果的控制元件可不是一行程式碼的事。要做成上

WPF 在image控制元件用滑鼠出矩形

原文: WPF 在image控制元件用滑鼠拖拽出矩形 今天有小夥伴問我一個問題,在image控制元件用滑鼠拖拽出矩形,本文告訴大家如何使用滑鼠畫出矩形 做出來的效果先請大家看一下 最簡單的方法是在 Down 的時候記錄按下的點,在 移動的時候重新計算所在的寬

jQuery-uploader輕量級圖片上傳控制元件(可

在xxx-uploader基礎上修改。 基於bootstrap和jQuery,需要引入 bootstrap.js 和 jQuery.js 原控制元件大小30多k,風格類似於bootstrap,可在css內修改樣式。 我這裡在uploader.js裡展現的樣式做了略微的調整:

解決asp.net web控制元件不能的問題

Tools--Options--HTML Designer--CSS Positioning 把change positioning to ......的CheckBox勾上就OK了。 中文版的 工具-->選項-->HTML設計器-->CSS定位-->定位選項-->將使用

在VARCHART XGantt甘特圖控制元件中輕鬆增強的快照工具

VARCHART XGantt是一款功能強大的甘特圖控制元件,其模組化的設計讓您可以建立滿足需要的應用程式。XGantt可用於.NET,ActiveX和ASP.NET應用程式,可以快速、簡單地整合到您的應用程式中,幫助您識別效能瓶頸、避免延遲以及高效利用資源,使複雜資料變得更加容易理解。可以點選下方

C++ Builder 實現控制元件放操作

5.1 實現控制元件拖放操作 拖放是使用者操縱物件的常用的方法。使用者可拖動整個控制元件,或將某一個控制元件(如列表框或樹狀檢視)中的項拖動到另一個控制元件中。 · 開始拖動操作。 ·

selenium - js日曆控制元件處理

# 13. js處理日曆控制元件''' 在web自動化的工程中,日曆控制大約分為兩種: 1. 可以直接輸入日期 2. 通過日曆控制元件選擇日期 基本思路: 利用js去掉readonly屬性,然後直接輸入時間。'''from selenium import webdriverdr

js控制元件隱藏及display屬性的使用介紹

用JavaScript隱藏控制元件的方法有兩用JavaScript隱藏控制元件的方法有兩種,分別是通過設定控制元件的style的“display”和“visibility”屬性。   當style.display="block"或style.visibility="visible"

HTML5/放(drag & drop)詳解

H5中拖拽屬性: draggable: auto | true | false   拖動事件:   - dragstart 在元素開始被拖動時觸發 - dragend 在拖動操作完成時觸發 - drag 在元素被拖動時觸發

android xml實現控制元件邊框陰影漸變效果

實現原理:使用兩塊畫布重疊,上面畫布小於下面畫布,下面畫布漸變 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/an

如何實現控制元件隨對話方塊大小變化而自動調整大小和位置

1. 處理對話方塊的WM_SIZE,然後用MoveWindow或者SetWindowPos來把對話方塊上面的控制元件重新調整新位置和大小。  2. 基本的做法就是響應WM_SIZE訊息,並按照視窗大小比例來調整控制元件的位置和大小,控制元件的大小最好設定成視窗的百分之幾,這

在.Net的WinForm開發中如何實現控制元件隨窗體大小的改變而自動適應其改變

在設計可供使用者調整大小的窗體時,如何實現該窗體上的控制元件也應能正確地隨窗體的改變而自動調整大小並且能重新定位?此時就要藉助控制元件的.Anchor屬性。Anchor屬性定義控制元件的定位點位置。當控制元件錨定到某個窗體時,如果該窗體的大小被調整,那麼該控制元件維持它與定位

一款比較好用的JS時間控制元件-laydate

一款比較好用的JS時間控制元件-laydate   官方講解:http://laydate.layui.com/   具體的內容請看官方講解,此處僅說名應用:   1、在jsp或html或其他中引入laydate.js     <script src="……/laydate/l

使用VS2010呼叫QtDesigner設計的UI檔案,並實現控制元件功能

一、利用Qt Designer設計UI。 參見《Linux視窗程式設計—Qt4精彩例項分析》 1、使用Qt Designer設計對話方塊的步驟: 2、Qt Designer5中表單模板。 3、建立窗體,在窗體放置控制元件(拖動控制元件到窗體介面); 4、佈局控制元件