您可以在隱藏的畫布中渲染圖像的副本,抓住鼠標位置周圍的矩形,並在第二個可見畫布中渲染此部分的放大圖。這是寫在代碼非常幾行 - 即使是在普通的JavaScript:
var zoom = function(img){
var canS = document.createElement('canvas'),
can = document.createElement('canvas'),
ctxS = canS.getContext('2d'),
ctx = can.getContext('2d'),
id = ctx.createImageData(240,240),
de = document.documentElement;
can.className = 'zoom';
can.width = can.height = 240;
canS.width = img.width;
canS.height = img.height;
img.parentElement.insertBefore(can,img.nextSibling);
ctxS.drawImage(img,0,0);
img.onmousemove = function(e){
var idS=ctxS.getImageData(
e.clientX-e.target.offsetLeft+(window.pageXOffset||de.scrollLeft)-20,
e.clientY-e.target.offsetTop+(window.pageYOffset||de.scrollTop)-20,
40,40);
for (var y=0;y<240;y++)
for (var x=0;x<240;x++)
for (var i=0;i<4;i++)
id.data[(240*y+x)*4+i] = idS.data[(40*~~(y/6)+~~(x/6))*4+i];
ctx.putImageData(id,0,0);
}
}
實施例: http://kirox.de/test/magnify.html
有一種改進的版本的鏈接,設有帶光效果和桶形失真的可調整圓形透鏡。也可用於畫布。
限制:
- 不跨域圖像的URL工作
- 無法在Firefox 25的當前版本工作在舊版本的IE
的
- 有一陣子之後顯著放緩盤旋
爲什麼不製造自己的?如果圖像縮小,這是一個簡單的'animate({width:'100%'})''。 – Blender 2011-05-20 16:02:43
如果所有的大插件都不適合你,那麼你的情況有什麼獨特之處? – 2011-05-20 16:03:00
我不會建議只使用一個圖像,因爲在消耗大量帶寬的情況下必須加載所有大圖像。 – pimvdb 2011-05-20 16:03:32