Inhaltsverzeichnis
演示示例
Heim Web-Frontend js-Tutorial javascript 图片放大效果函数_图象特效

javascript 图片放大效果函数_图象特效

May 16, 2016 pm 06:41 PM
javascript 图片放大


[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

imageZoom.js
复制代码 代码如下:

/*
*Author:sohighthesky
*Date:2009-11-14
*/
/*
*img 指定要放大的图片或者其id
*options:参见代码中setOptions中的注释
*/
var imageZoom = function(img,options) {
    this.img=this.g(img);
    if(this.img.nodeName!="IMG") {
        if(this.img && this.img.children[0].nodeName=="IMG")this.img=this.img.children[0];
        else throw Error("Invalid argument [img] !");
    }
    this.setOptions(options);
    this.init();
}
imageZoom.prototype={
    g:function(id) {return typeof(id)=="string"?document.getElementById(id):id;},
    ae:function(el,type,call) {
if(el.addEventListener)el.addEventListener(type,call,false);
        else el.attachEvent("on"+type,call);
},
    getPos:function(o){//取元素坐标
        var x = 0, y = 0;
        do{x += o.offsetLeft; y += o.offsetTop;}
        while(o=o.offsetParent);
        return {'x':x,'y':y};
    },
    setOptions:function(options) {
     this.options={
     mul:0,//默认为不放大(显示图片的原来大小)
         bigImg:null,//指定放大的图片路径(要跟小图成比例才好)
         viewer:null, //指定显示的位置(可以为一个div或者其id)
         viewerCla:"",//预览的div的类样式
         viewerMul:1,//指定显示div的放大倍数,默认为原大小,设置viewer时此参数无效
         onShow:function(){},
         onHide:function(){}
     };
        for(var o in options) {this.options[o]=options[o];}
        this.options.bigImg =this.options.bigImg ||this.img.src;
},
getSize:function(o) {
        return {w:o.offsetWidth,h:o.offsetHeight};
},
    createView:function() {        
        var _is=this.getSize(this.img);
        var d=document;
        if(this.options.viewer){
            this.viewer=this.g(this.options.viewer);
            this.viewer.style.overflow="hidden";
            this.viewer.style.position="relative";
        } else {
            this.viewer=d.createElement("div");
            this.viewer.className=this.options.viewerCla;
            var pos=this.getPos(this.img);
            this.viewer.style.cssText="display:none;overflow:hidden;position:absolute;top:"+pos.y+"px;left:"+(pos.x+_is.w+10)+"px;height:"+_is.h*this.options.viewerMul+"px;width:"+_is.w*this.options.viewerMul+"px";
            d.body.appendChild(this.viewer);
        }        
        this.viewimg=d.createElement("img");
        this.viewimg.style.cssText="position:relative;left:-33%;top:-33%;";
        this.viewimg.src=this.options.bigImg;
        if(this.options.mul) {//设置放大倍数
            this.viewimg.style.width=_is.w*this.options.mul +"px";
            this.viewimg.style.height=_is.h*this.options.mul +"px";
        }
        this.viewer.appendChild(this.viewimg);
    },
    move:function(e) {
        if(!this.options.mul)
         this.options.mul=this.viewimg.offsetHeight/this.img.offsetHeight;
        var pos=this.getPos(this.img);
        var l=e.clientX-pos.x+(document.documentElement.scrollLeft || document.body.scrollLeft);//鼠标位置相对于图片左上角的偏移
        var t=e.clientY-pos.y+(document.documentElement.scrollTop || document.body.scrollTop);
        var zs=this.getSize(this.viewer);
        var pl=-l*this.options.mul+zs.w/2;
        var pt=-t*this.options.mul+zs.h/2;
        pl=pl>0?0:pl;
        pt=pt>0?0:pt;

var vs=this.getSize(this.viewimg);
pl=Math.max(pl,zs.w-vs.w);
pt=Math.max(pt,zs.h-vs.h);

        this.viewimg.style.left=pl+"px";
        this.viewimg.style.top=pt+"px";
    },
    init:function() {
     var o=this;
     var load=function(a) {//图片加载
     o.createView.call(o);
     o.img.setAttribute("alt","");
     o.ae(o.img,"mousemove",function(event){o.move.call(o,event);});
         if(!o.options.viewer) {
         o.ae(o.img,"mouseover",function(){o.options.onShow();o.viewer.style.display=""});
         o.ae(o.img,"mouseout",function(){o.options.onHide();o.viewer.style.display="none"});
         }
     };
     if(typeof(document.readyState)=="undefined" || window.opera) {
            var de=document.documentElement || document.body;
            var h=de.scrollHeight;
            var t=setInterval(function() {
                if(h==de.scrollHeight){
                    clearInterval(t);
                    load();                    
                } else h=de.scrollHeight;
            },500);
     } else if(document.readyState=="complete")
     load();
     else
     o.ae(window,"load",load);
    }
};
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript Dec 17, 2023 pm 02:54 PM

So implementieren Sie ein Online-Spracherkennungssystem mit WebSocket und JavaScript

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen Dec 17, 2023 pm 05:30 PM

WebSocket und JavaScript: Schlüsseltechnologien zur Implementierung von Echtzeitüberwachungssystemen

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript Dec 17, 2023 am 09:39 AM

So implementieren Sie ein Online-Reservierungssystem mit WebSocket und JavaScript

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems Dec 17, 2023 pm 12:09 PM

Verwendung von JavaScript und WebSocket zur Implementierung eines Echtzeit-Online-Bestellsystems

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems Dec 17, 2023 pm 05:13 PM

JavaScript und WebSocket: Aufbau eines effizienten Echtzeit-Wettervorhersagesystems

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript Jan 05, 2024 pm 01:37 PM

So erhalten Sie auf einfache Weise HTTP-Statuscode in JavaScript

So verwenden Sie insertBefore in Javascript So verwenden Sie insertBefore in Javascript Nov 24, 2023 am 11:56 AM

So verwenden Sie insertBefore in Javascript

See all articles