코드 복사 코드는 다음과 같습니다.
_init:function(){
var self=this;
/*赋值src给大图*/
this.img.src=this.imgsource.src;
/*get边框長度*/
this.borderwidth=this.imgsource.offsetWidth - this.imgsource.clientWidth;
/**
* 大きな画像の幅と高さを設定します (X 倍)
* 大きな画像コンテナの幅、高さ、位置を設定します
* マウスの次のレイヤーの幅、高さ、透明度を設定します
*/
this.pi=(this.config.zoomWidth!='auto'?this.config.zoomWidth/this.imgsource.offsetWidth:1)
this.pi2 =(this.config.zoomHeight!='auto'?this.config.zoomHeight/this.imgsource.offsetHeight:1)
this._css(this.img,{
'position':'absolute',
'width':(this.config.zoomWidth!='auto' ?this.imgsource.offsetWidth*this.config.max*this.pi:this.imgsource.offsetWidth*this.config.max) "px" ,
'高さ':(this.config.zoomHeight!='auto' ?this.imgsource.offsetHeight*this.config.max*this.pi2:this.imgsource.offsetHeight*this.config.max) "px "
})._css(this.mag,{
'width':(this.config.zoomWidth!='auto' ? this.config.zoomWidth:this.imgsource.offsetWidth) "px",
'height':(this.config.zoomHeight!='auto'?this.config.zoomHeight:this.imgsource.offsetHeight) "px",
'left':D.getX(this.content) this .imgsource.offsetWidth 10 "px",
'top':this.content.offsetTop "px",
'position' : 'absolute',
"zIndex":this.config.zIndex
})._css(this.tips,{
'display':'',
'width':(this.config.tipsWidth!='auto' ? this.config.tipsWidth: parseInt(this.imgsource.offsetWidth / this.config.max)- this.borderwidth) "px",
'height' : (this.config.tipsHeight!='auto' ? this. config.tipsHeight: parseInt(this.imgsource.offsetHeight / this.config.max) - this.borderwidth ) 'px',
'opacity' : this.config.opacity
})
E.on (this.content,'mousemove',function(e){
self._css(self.mag,{"display":"block"})._css(self.tips,{"display":"block" })._move(e,self.tips)
})
E.on(this.content,'mouseout',function(e){
self._css(self.tips,{"display ":"none"})._css(self.mag,{"display":"none"});
})
!!this.config.zoomType && E.on(self.tips,' Mouseout',function(e){
self._css(self.imgsource,{"opacity":1});
self.tips.getElementsByTagName("img")[0] && self.tips.removeChild (self.tips.getElementsByTagName("img")[0]);
})
if(ie6 && !!this.config.iframe){
this._createIframe(this.mag);
}
D.setStyle(this.content,"cursor",this.config.cursor);
}、
コンポーネントの初期化原コード
がマウスの動きを認識する層と拡大図は、
1 の接続値を使用して拡大表示されます。
2. 独自にzoomWidthやzoomHeightを設定する場合は、this.piの宽比とthis.pi2の高比(写真のサイズとの比)を設定します
3. 大きな画像のサイズと高さを設定します
4. 大画像コンテナの高さと位置を設定します
5. マウス層の位置と高さと透明度を設定します
6. 大画像コンテナの追加mousemove イベント
7. 原図コンテナ増加mouseout イベント
8 反色特効後、透明度を追加し、効果を実現するための Dom (ネズミ标层结構造内用appendChild一img元素)
9 ie6 创建iframe を遮蔽するためのselect。 (問題が発生した場合、ie6 は選択され、zIndex を使用せずに修正されます)
10 光マーク式を設定する
スタイルを設定する方法
_css:function(el,json){
for(var s in json){
D .setStyle(el,s,json[s]);
}
これを返します;
},
Yui が提供する独自の設定 Dom 式のメソッド D.setStyle(dom,style プロパティ名, プロパティの值);
for (var s in json) 来遍历 json 对オブジェクトのすべてのプロパティ
return this; 常用的链式调用写法 // this._css(/**/)._css(/**/) ._css(/**/) ……
核心mousemove イベント代牌
_move:function(e,tips){
var point=E.getXY(e);
/**
* プロンプトレイヤーの位置
* 大きな画像の表示位置
*/
this._css(tips,{
'top' : Math.min(Math.max(point[1] - this.content.offsetTop-parseInt(tips) .offsetHeight)/2 ,0),this.content.offsetHeight -tips.offsetHeight) 'px',
'left' : Math.min(Math.max(point[0] - this.content.offsetLeft-parseInt) (tips.offsetWidth)/2 ,0),this.content.offsetWidth -tips.offsetWidth) 'px'
})._css(this.img,{
'top':-(parseInt(tips. style.top) * this.config.max *this.pi2) 'px',
'left' : - (parseInt(tips.style.left) * this.config.max *this.pi) 'px'
});
/**
* 逆色効果
*/
if(!!this.config.zoomType){
if(!tips.getElementsByTagName("img").length){
var imgs=document .createElement("img");
imgs.id='temp';
imgs.src=this.imgsource.src;
this._css(imgs,{
'width':this.imgsource.offsetWidth "px",
'height':this.imgsource.offsetHeight "px",
'position':'絶対'
});
tips.appendChild(imgs);
this.imgs=imgs;
}
this._css(this.imgsource,{
"不透明度":0.2
})._css(this.tips,{
"不透明度":1,
"可視性":"可視"
})._css(D.get("temp"),{
'top':-(parseInt(tips.style.top)) "px",
' left':-(parseInt(tips.style.left)) "px"
})
}
},
提案层位置の移動ネズミ标位置X轴 - this.offsetLeft - ネズミ标框宽度/2
使用Math.maxとMath.min、無視ネズミ标框超出tuxiang
大図位置の移動=小図の位置 X 拡大倍数 X 宽比(默认1 )
の逆効果は、jquery の 1 つのアプリケーション上で見られる、他の代コードが見られないことです。下のダム構造構造と私がこのような方法で見られるのは、
設置場所の図の透明度が 0.2 であることです。灰色が完了したら、マウス層を透明に 1 に設定します。つまり、不透明です。層内は 1 つの画像と imgsource の地盤です。
この画像の父元素の位置も絶対です。したがって、上と左の位置を設定します。ネズミ标層の图片
创建iframe
_createIframe:function (el){
varlayer = document.createElement('iframe');
layer.tabIndex = '-1';
layer.src = 'javascript:false;';
el.appendChild(layer);
this._css(layer,{
"width":(this.config.zoomWidth!='auto' ? this.config.zoomWidth:this.imgsource.offsetWidth) "px",
"height ":(this.config.zoomHeight!='auto'?this.config.zoomHeight:this.imgsource.offsetHeight) "px",
"zIndex":this.config.zIndex
})
}
iframe 要素の高さと zIndex の設定、構成パラメータ設定 iframe:true に ie6 下で才会创建、他の浏览器下で設定 true も不会建、必要がないため
代码改进中
1 追加特効的插件机制
2 优化設定宽高值表达式的代码 感觉太长太臃肿
3 追加图片预ダウンロード
4
5 增加className,让用户可自定义
6 等等(...)
地址打包下ダウンロード :放大镜