Home > Web Front-end > JS Tutorial > javascript magnifying glass v1.0 magnifying glass effect based on Yui2_YUI.Ext related

javascript magnifying glass v1.0 magnifying glass effect based on Yui2_YUI.Ext related

WBOY
Release: 2016-05-16 18:33:09
Original
1020 people have browsed it
javascript magnifying glass v1.0 magnifying glass effect based on Yui2_YUI.Ext related
V1.0 구현 기능
1 배율 설정
2 투명도 설정
3 반전 특수 효과
4 확대된 사진 레이어의 크기를 사용자 지정
5 마우스 레이어 커스터마이징
6 ie6에서 마스킹 문제 선택
7 커서 스타일 커스터마이징
8 zIndex 설정
간단한 초기화 방법 예시
코드 복사 코드는 다음과 같습니다.

new flower.init("Demo","mag")
new flower.init("Demo1", "mag1", {
max:3,zoomType:false,zoomWidth:200,zoomHeight:200,iframe:true,zIndex:666,cursor:"row-resize"
}); >
코드 설명


defaultConfig={
/**
* 돋보기 확대
* @type 숫자
*/
최대:3,
/**
* *돋보기 마우스 움직임 레이어의 투명도
* @type Number
*/
불투명도:0.5,
/**표시 효과 false가 기본값이고 true가 색상 반전 효과
* @type Boolean
*/
ZoomType:false,
/**애니메이션 표시
* @type String
*/
showEffect:'fadein',
/**레이어 너비 확대
* @type Number
*/
zoomWidth:'auto',
/** 확대 레이어 높이
* @type Number
*/
zoomHeight:'auto',
/**마우스 레이어 너비
* @type Number
*/
tipsWidth:'auto',
/**마우스 레이어 높이
* @type Number
*/
tipsHeight: 'auto',
/**iframe 마스크 선택
* @type Boolean
*/
iframe:false,
/**iframe zIndex
* @type Number
*/
zIndex:999,
/**커서 스타일
* @type String
* /
cursor:" auto"
};


배율, 너비, 높이, 투명도 등에 대한 설정을 포함한 구성 요소의 기본 매개변수 구성입니다.
2 속성을 정의합니다.


namespace.init=function(content,mag ,config){
/**
* 원본 이미지 컨테이너
* @type HTMLElement
*/
this.content=D.get(content)
/**
* 이미지 컨테이너 확대
* @type HTMLElement
*/
this.mag=D.get (매그);
/**
* 원본 이미지
* @type HTMLElement
*/
this.imgsource=this.content.getElementsByTagName("img")[0]
/**
* 이미지 확대
* @type HTMLElement
*/
this.img=this.mag.getElementsByTagName("img" )[0];
/**
* 마우스 레이어
* @type HTMLElement
*/
this.tips=this.content.getElementsByTagName("div")[0];
/**
* 구성 매개변수
* @type this.tipsect
*/
this.config=L.merge(defaultConfig,config||{})
/*초기화*/
this._init()
};


init 이 함수는 세 가지 실제 매개변수(원본 이미지의 컨테이너 ID, 확대된 이미지 컨테이너 ID 및 구성 매개변수)를 허용합니다(Firebug를 설치한 학생은 코드 구조를 볼 수 있음).
this.config=L.merge(defaultConfig,config||{ });
이 문장은 다음 객체의 속성이 이전 객체의 속성을 덮어쓰고, 이와 같은
을 반환한다는 의미입니다. config=L.merge({"a":"aa"},{"a" :"bb"})
현재 This.config.a == "bb"
config||{ }
config가 없으면 빈 객체 인수를 반환
프로토타입 초기화 방법
코드


코드 복사 코드는 다음과 같습니다.

_init:function(){
var self=this;
/*赋值src给大图*/
this.img.src=this.imgsource.src;
/*get边框长度*/
this.borderwidth=this.imgsource.offsetWidth - this.imgsource.clientWidth;
/**
* Set the width and height of the large image (X multiple)
* Set the width, height and position of the large image container
* Set the width, height and transparency of the mouse following layer
*/
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",
'height':(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。(默认情况下在无iframe的时候,ie6会被select挡住,无法用zIndex来修正 )
10 设置光标样式
style设置的方法
复制代码 代码如下:

_css:function(el,json){
for(var s in json){
D.setStyle(el,s,json[s]);
}
return this;
},

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);
/**
* Prompt layer position
* Large picture display position
*/
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'
});
/**
* Inverse color effect
*/
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':'absolute'
});
tips.appendChild(imgs);
this.imgs=imgs;
}
this._css(this.imgsource,{
"opacity":0.2
})._css(this.tips,{
"opacity":1,
"visibility":"visible"
})._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的一个插件上看到的 没有看他的代码 看了下他dom结构 应该和我这种实现方式是一样的
设置原图的透明度为0.2 这样就变灰色了 然后设置鼠标层透明为1,也就是不透明.层内是一个图片 和 imgsource的地址是一样的
这图片的父元素position也是absolute,所以我们要实时设置top和left值来定位鼠标层的图片
创建iframe
复制代码 代码如下:

_createIframe:function(el){
var layer = 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 等等(...)
地址打包下载 :放大镜
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template