拖拽改變div的大小

来源:http://www.cnblogs.com/laq627/archive/2016/10/08/5937967.html
-Advertisement-
Play Games

拖拽改變div的大小 轉自:http://blog.csdn.net/w329636271/article/details/50696121 ...


拖拽改變div的大小

  1 <!DOCTYPE html>
  2 <html>
  3 
  4     <head>
  5         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6         <title>Resize</title>
  7         <style type="text/css">
  8             #rRightDown,
  9             #rLeftDown,
 10             #rLeftUp,
 11             #rRightUp,
 12             #rRight,
 13             #rLeft,
 14             #rUp,
 15             #rDown {
 16                 position: absolute;
 17                 background: #C00;
 18                 width: 6px;
 19                 height: 6px;
 20                 z-index: 5;
 21                 font-size: 0;
 22             }
 23             
 24             #rRight {
 25                 width: 15px
 26             }
 27             
 28             #rLeftDown,
 29             #rRightUp {
 30                 cursor: ne-resize;
 31             }
 32             
 33             #rRightDown,
 34             #rLeftUp {
 35                 cursor: nw-resize;
 36             }
 37             
 38             #rRight,
 39             #rLeft {
 40                 cursor: e-resize;
 41             }
 42             
 43             #rUp,
 44             #rDown {
 45                 cursor: n-resize;
 46             }
 47             
 48             #rRightDown {
 49                 bottom: -3px;
 50                 right: -3px;
 51             }
 52             
 53             #rLeftDown {
 54                 bottom: -3px;
 55                 left: -3px;
 56             }
 57             
 58             #rRightUp {
 59                 top: -3px;
 60                 right: -3px;
 61             }
 62             
 63             #rLeftUp {
 64                 top: -3px;
 65                 left: -3px;
 66             }
 67             
 68             #rRight {
 69                 right: -3px;
 70                 top: 50%
 71             }
 72             
 73             #rLeft {
 74                 left: -3px;
 75                 top: 50%
 76             }
 77             
 78             #rUp {
 79                 top: -3px;
 80                 left: 50%
 81             }
 82             
 83             #rDown {
 84                 bottom: -3px;
 85                 left: 50%
 86             }
 87         </style>
 88     </head>
 89 
 90     <body>
 91         <div id='ss' style="height:100px; width:100px; border:1px solid #000000; position:absolute; left:200px; top:200px;">
 92             <div id="rRightDown"> </div>
 93             <div id="rLeftDown"> </div>
 94             <div id="rRightUp"> </div>
 95             <div id="rLeftUp"> </div>
 96             <div id="rRight"> </div>
 97             <div id="rLeft"> </div>
 98             <div id="rUp"> </div>
 99             <div id="rDown"></div>
100         </div>
101         <script>
102             var Sys = (function(ua) {
103                 var s = {};
104                 s.IE = ua.match(/msie ([\d.]+)/) ? true : false;
105                 s.Firefox = ua.match(/firefox\/([\d.]+)/) ? true : false;
106                 s.Chrome = ua.match(/chrome\/([\d.]+)/) ? true : false;
107                 s.IE6 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 6)) ? true : false;
108                 s.IE7 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 7)) ? true : false;
109                 s.IE8 = (s.IE && ([/MSIE (\d)\.0/i.exec(navigator.userAgent)][0][1] == 8)) ? true : false;
110                 return s;
111             })(navigator.userAgent.toLowerCase()); /*判斷是哪一種瀏覽器,火狐,谷歌,ie*/
112             var $ = function(id) {
113                 return document.getElementById(id);
114             }; /*獲取元素,模仿jQuery*/
115             var Css = function(e, o) { /*更改對象的top,left,width,height來控制對象的大小*/
116                 for(var i in o)
117                     e.style[i] = o[i];
118             };
119             var Extend = function(destination, source) { /*拷貝對象的屬性*/
120                 for(var property in source) {
121                     destination[property] = source[property];
122                 }
123             };
124             /*直接調用方法*/
125             var Bind = function(object, fun) {
126                 var args = Array.prototype.slice.call(arguments).slice(2);
127                 return function() {
128                     return fun.apply(object, args);
129                 }
130             };
131             /*直接調用方法,並將事件的類型傳入作為第一個參數*/
132             var BindAsEventListener = function(object, fun) {
133                 var args = Array.prototype.slice.call(arguments).slice(2);
134                 return function(event) {
135                     return fun.apply(object, [event || window.event].concat(args));
136                 }
137             };
138             /*獲取當前元素的屬性*/
139             var CurrentStyle = function(element) {
140                 return element.currentStyle || document.defaultView.getComputedStyle(element, null);
141             };
142             /*事件監聽,執行對應的函數*/
143             function addListener(element, e, fn) {
144                 element.addEventListener ? element.addEventListener(e, fn, false) : element.attachEvent("on" + e, fn);
145             };
146             /*事件的移除*/
147             function removeListener(element, e, fn) {
148                 element.removeEventListener ? element.removeEventListener(e, fn, false) : element.detachEvent("on" + e, fn)
149             };
150             /*創建一個新的可以拖拽的,變換大小的對象*/
151             var Class = function(properties) {
152                 var _class = function() {
153                     return(arguments[0] !== null && this.initialize && typeof(this.initialize) == 'function') ? this.initialize.apply(this, arguments) : this;
154                 };
155                 _class.prototype = properties;
156                 return _class;
157             };
158             var Resize = new Class({
159                 initialize: function(obj) {
160                     this.obj = obj;
161                     this.resizeelm = null;
162                     this.fun = null; //記錄觸發什麼事件的索引   
163                     this.original = []; //記錄開始狀態的數組   
164                     this.width = null;
165                     this.height = null;
166                     this.fR = BindAsEventListener(this, this.resize); /*拖拽去更改div的大小*/
167                     this.fS = Bind(this, this.stop); /*停止移除監聽的事件*/
168                 },
169                 set: function(elm, direction) {
170                     if(!elm) return;
171                     this.resizeelm = elm;
172                     /*點擊事件的監聽,調用start函數去初始化數據,監聽mousemove和mouseup,這兩個事件,當mouseover的時候,去更改div的大小,當mouseup,去清除之前監聽的兩個事件*/
173                     addListener(this.resizeelm, 'mousedown', BindAsEventListener(this, this.start, this[direction]));
174                     return this;
175                 },
176                 start: function(e, fun) {
177                     this.fun = fun;
178                     this.original = [parseInt(CurrentStyle(this.obj).width), parseInt(CurrentStyle(this.obj).height), parseInt(CurrentStyle(this.obj).left), parseInt(CurrentStyle(this.obj).top)];
179                     console.log({
180                         width: this.original[0],
181                         height: this.original[1],
182                         left: this.original[2],
183                         top: this.original[3]
184                     });
185                     this.width = (this.original[2] || 0) + this.original[0];
186                     this.height = (this.original[3] || 0) + this.original[1];
187                     addListener(document, "mousemove", this.fR);
188                     addListener(document, 'mouseup', this.fS);
189                 },
190                 resize: function(e) {
191                     this.fun(e);
192                     /*失去焦點的時候,調用this.stop去清除監聽事件*/
193                     Sys.IE ? (this.resizeelm.onlosecapture = function() {
194                         this.fS();
195                     }) : (this.resizeelm.onblur = function() {
196                         this.fS();
197                     })
198                 },
199                 stop: function() {
200                     removeListener(document, "mousemove", this.fR);
201                     removeListener(document, "mousemove", this.fS);
202                     window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); /**清除選中的內容*/
203                 },
204                 up: 	   

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

-Advertisement-
Play Games
更多相關文章
  • Python 學習之路 目錄介紹 一、Python 介紹 python的創始人是吉多·範羅蘇姆.Python於1989年的聖誕節期間誕生. 二、Python 的主要應用領域 雲計算:OpenStack是python語言開發的 web開發:典型web框架有Django 科學運算\人工智慧:典型庫Num ...
  • Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6622 Accepted: 3558 Description We give the following inductive definition of a “r ...
  • MySql簡單操作 JDBC JDBC驅動程式分為4類 JDBC ODBC橋 部分本地API,部分Java驅動程式 JDBC網路純Java驅動程式 本地協議Java驅動程式 JDBC的示例 建立一個test case來驗證一下 執行結果 ...
  • 合併排序 1. 演算法思想 對於輸入的數組a[i , j],將其分為大致相同的2個子集,利用遞歸一直分下去,然後分別對2個子集進行排序(在合併中體現),最終完成排序。 2. 演算法實現 3. 演算法分析 在Merge排序中,其時間複雜度與輸入數組是否有序無關,最壞時間複雜度和平均時間複雜度均為Ο(nlog ...
  • struts2 Java Web開發環境 1、安裝jdk 2、安裝tomcat 3、配置環境 "Java Web環境配置" Web工程 新建一個web工程,工程名為WebappTest 導入struts2的基礎jar包 編寫Action類和配置文件 編寫action類 編寫action處理後跳轉的j ...
  • Coloring Brackets time limit per test: 2 seconds time limit per test: 2 seconds memory limit per test: 256 megabytes memory limit per test: 256 megaby ...
  • 之前碰到的這樣一個需求,要將公司的服務在地圖中顯示出來,並將用戶每天的訪問坐標進行統計看有多少用戶是在所能達到的服務範圍半徑內。 以下是PHP代碼的實現 (僅驗證坐標在某片坐標區域內) 在地圖中的運用: ...
  • JHipster的亮點 JHipster或者稱Java Hipster,是一個應用代碼產生器,能夠創建Spring Boot + AngularJS的應用。開源項目地址:JHipster/Github。 JHipster使用Node.js和Yeoman產生Java應用代碼,使用Maven(Gradl ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...