首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ExtJS 實現圖片放大鏡效果的最佳實踐

     編輯:程式設計綜合問答

方案對比

方案優點缺點
純 ExtJS 實現無外部依賴,風格一致代碼量大,需手寫拖拽、縮放邏輯
集成 jQuery 插件(如 jqZoom)功能豐富,成熟穩定引入 jQuery 增加體積,事件機制需橋接
使用 Ext.ux.ImageZoom 擴展原生組件,API 友好社區維護較少,ExtJS 6+ 兼容性需驗證

推薦方案:基於 Ext.ux.ImageZoom 的輕量封裝

Ext.define('MyApp.view.ImageMagnifier', {
    extend: 'Ext.container.Container',
    alias: 'widget.imagemagnifier',
    config: {
        src: '',
        zoomFactor: 2
    },
    initComponent: function() {
        this.items = [{
            xtype: 'image',
            src: this.getSrc(),
            listeners: {
                render: function(img) {
                    new Ext.ux.ImageZoom(img.getEl(), {
                        zoom: this.getZoomFactor()
                    });
                },
                scope: this
            }
        }];
        this.callParent();
    }
});

// 使用
{
    xtype: 'imagemagnifier',
    src: 'resources/images/product.jpg',
    zoomFactor: 3
}

若無現成擴展,原生實現核心步驟

  1. 容器 position: relative; overflow: hidden;
  2. 原圖 mousemove 事件中計算鼠標相對位置。
  3. 動態創建/移動一個 div.lens(半透明矩形)跟隨鼠標。
  4. 大圖容器 background-image: url(...); background-position: -x*zoom -y*zoom; 同步更新。

性能優化提示

  • 大圖按需加載:lens 首次顯示時才 new Image() 載入大圖。
  • 使用 requestAnimationFrame 節流 mousemove 回調。
  • 銷毀組件時務必 removeListener 避免內存洩漏。

ExtJS 6.2+ 官方示例 examples/kitchensink/view/image-zoom.js 已包含完整實現,可直接複製適配。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved