JavaScript 圖片放大鏡(可拖放、縮放效果)第2/4頁
更新時間:2008年09月15日 10:35:34 作者:
背景:很久之前就在marry5.com看到這個效果,當時覺得很神奇,礙于水平有限,沒做出來。
【縮放程序】
原理也很簡單,根據鼠標的坐標來設置縮放對象樣式。
除了設置width和height外,對于上邊和左邊的縮放還要設置left和top,詳細可參考代碼。
程序更重要的是結構設計,因為有八個方向又分普通和比例縮放,
要盡量抓出能重用的部分,不然程序的復雜度可想而知。
為了提高程序內函數重用度減低復雜度我做了以下設計:
1.設一個_fun程序存放縮放過程中要執(zhí)行的程序(有點像委托);
2.計算四個樣式初始值,縮放函數修改這些初始值,最后重新設置全部樣式(為了減低復雜度不是按需修改);
3.對于普通縮放只需要四個方向的程序就夠,像右下方向可以用執(zhí)行右邊和下邊程序代替;
4.根據比例縮放程序和普通縮放程序可重用的部分抽出了四個修正程序(用了部分程序效率來換?。?
下面是程序中比較有用的部分:
【邊寬獲取】
由于涉及到高度和寬度的修改,邊框寬度的獲取必不可少。
因為用offset取得的寬度或高度是包括了邊框寬度的,style中的寬度和高度是不包括邊框寬度的,
所以設置樣式的時候必須在offset取得的寬度或高度的基礎上減去邊框寬度。
那怎么取得邊框寬度呢?
直觀的方法是通過parseInt(object.style.borderBottomWidth)來獲取,但這是錯誤的,
因為這樣只能獲取style中設置的樣式,而不能獲取class中設置的樣式。
要取得最終樣式(實際的樣式),在ie中可使用currentStyle取得,在ff中使用document.defaultView.getComputedStyle(object, null),
那么用下面的程序就可以獲取邊框寬度了:
復制代碼 代碼如下:
var _style = this._obj.currentStyle || document.defaultView.getComputedStyle(this._obj, null);
this._xBorder = parseInt(_style.borderLeftWidth) + parseInt(_style.borderRightWidth);
this._yBorder = parseInt(_style.borderTopWidth) + parseInt(_style.borderBottomWidth);
【比例縮放】
比例縮放原理也很簡單,在原有縮放的基礎上,再按比例設置一次高和寬。
例如右下的比例縮放是先設置一次右邊的普通縮放取得寬度,
根據比例取得高度后執(zhí)行一次下邊的修正程序,
由于此時高度經過修正可能已經改變了,最后需要再執(zhí)行一次右邊的修正程序。
復制代碼 代碼如下:
this.SetRight(oEvent);
this.repairDown(parseInt(this.style_width / this._scale));
this.repairRight(parseInt(this.style_height * this._scale));
這樣的縮放是以寬度優(yōu)先的,對于上下兩個點以高度優(yōu)先會有更好的體驗,
例如對于上面的點可以:
復制代碼 代碼如下:
this.SetUp(oEvent);
this.repairRight(parseInt(this.style_height * this._scale));
this.repairUp(parseInt(this.style_width / this._scale));
對于上下左右四個點,更好的體驗當然是以該點為中心縮放,
各位有興趣的話可以把這個也做出來,寫多四個修正程序對應這幾個點就行。
而最小限制,范圍限制可參照修正程序中的代碼。
程序中也使用了跟拖放差不多的釋放選擇和鼠標捕獲。
【鼠標捕獲補充】
setCapture解決了ie中鼠標捕獲的問題,但ff下的鼠標捕獲還有問題。
當層的內部沒有文本內容時,ie捕獲正常,但ff在拖放到瀏覽器外時捕獲就會失效,
暫時的解決方法只有插入文本,例如:
resize.innerHTML = "<font size='1px'> </font>";
各位如果有更好解決方案的話記得通知我啊。
相關文章
小程序開發(fā)?page-container?頁面容器彈出對話框功能的實現
這篇文章主要介紹了小程序開發(fā)?page-container?頁面容器,彈出對話框,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08JavaScript實現帶有子菜單和控件的slider輪播圖效果
本文通過實例代碼給大家介紹了基于js實現帶有子菜單和控件的slider輪播圖效果,本文附有圖片和示例代碼,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-11-11Firefox中通過JavaScript復制數據到剪貼板(Copy to Clipboard 跨瀏覽器版)
這篇文章主要介紹了irefox中通過JavaScript復制數據到剪貼板的方法,可以跨瀏覽器使用,大家可以使用看看2013-11-11