JavaScript 圖片放大鏡(可拖放、縮放效果)第1/4頁

來源:互聯網
上載者:User

前些日子突然想做一個透鏡效果,就突然想到了這個效果,於是找出當年“珍藏”的代碼決定一嘗所願。
前言:
這個程式主要分三部分:層的拖放、層的縮放、圖片切割(包括預覽)。
其中層的拖放是很常見的效果,層的縮放有點難度,圖片切割看著炫其實原理也很簡單。
不過在實現的過程中也學習到很多以前不知道的東西,下面都會說明,希望大家從中也能學到東西。
原理:

【拖放程式】

基本原理很簡單,不知道的看代碼就明白,其中參考了越兔和BlueDestiny的相關文章。

下面說一下比較有用的地方:

【範圍限制】

首先當然是有拖放範圍參數,分別是mxLeft(左邊的left最小值)、mxRight(右邊的left最大值)、mxTop(上邊的top最小值)、mxBottom(下邊的top最大值)。
然後在拖動程式Move()中看有沒有超過,超過的話設回極限值就行: 複製代碼 代碼如下:if(this.Limit){
//擷取超出長度
var iRight = iLeft + this._obj.offsetWidth - this.mxRight, iBottom = iTop + this._obj.offsetHeight - this.mxBottom;
//這裡是先設定右邊下邊再設定左邊上邊,可能會不準確
if(iRight > 0) iLeft -= iRight;
if(iBottom > 0) iTop -= iBottom;
if(this.mxLeft > iLeft) iLeft = this.mxLeft;
if(this.mxTop > iTop) iTop = this.mxTop;
}

【釋放選擇】
我以前就用的方法是設定ie的onselectstart和ff的MozUserSelect,
但BlueDestiny說“用user-select會相當於event.preventDefault。阻止預設動作就會在某些操作的時候導致mouseup丟失。”,
最好的方法是ie用document.selection.empty(),ff用window.getSelection().removeAllRanges()。
所以可以在Move()中加入:

window.getSelection && window.getSelection().removeAllRanges();這種寫法是從越兔的程式中學到的。
因為ie的滑鼠捕獲預設(下面會說)帶這個,所以ie就不用了。
【滑鼠捕獲】

以前不知道js有這個東西,使用很簡單:
設定捕獲:this.Drag.setCapture();
取消捕獲:this.Drag.releaseCapture()。
它的作用是:將滑鼠捕獲設定到指定的對象。這個對象會為當前應用程式或整個系統接收所有滑鼠輸入。
還不明白的話,試試拖放的時候把滑鼠拖放到瀏覽器外面,會發現拖動還在繼續,
如果沒有這個滑鼠捕獲就會失效了。
但在瀏覽器外是觸發不了mouseup的,不過還可以用losecapture事件代替:

addEventHandler(this.Drag, "losecapture", this._fS);
this.Drag.setCapture();
程式中給ff的window添加blur時停止的事件,越兔說是為了可以檢測到alt+tab造成的mouseup丟失,完美一點,也加上去了。

這樣一個拖放程式就完成了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.