돋보기 효과를 얻으려면 순수 자바스크립트를 사용하세요._javascript 기술
JD나 타오바오의 특정 상품에는 돋보기 효과가 있습니다. 인터넷에 비슷한 플러그인이 많지만 프로젝트에 적용하기에는 불편한 점이 많습니다. 비슷한 플러그인을 직접 작성하고 코드를 축적하는 데 시간이 걸리면 해보자!! 🎜>
이 특수 효과를 플러그인에 캡슐화할 계획입니다. 먼저 가장 기본적인 알고리즘을 구현한 다음 단계별로 캡슐화합니다.
html 코드:
CSS 코드:
* {
여백: 0;
패딩: 0;
}
스타일>
자바스크립트 코드:
함수 createElement(MagnifierId, sImg, bImg) {
var 돋보기 = $(MagnifierId);
Magnifier.style.position = '상대적';
//소형 div
var smallDiv = $Create("div");
smallDiv.setAttribute("id", "small");
smallDiv.style.position = "절대";
//遮罩层
var 마스크 = $Create("div");
마스크.setAttribute("id", "마스크");
마스크.스타일.위치 = "절대";
//그림
var 미러 = $Create("div");
mirror.setAttribute("id", "mirror");
mirror.style.opacity = 0.3;
mirror.style.position = "절대";
mirror.style.display = "없음";
//소소
var smallImg = $Create("img");
smallImg.setAttribute("src", sImg);
smallImg.setAttribute("id", "smallImg");
smallImg.onload = 함수 () {
//如果没设置放大镜적 height或者width 根据小图大小设置放大镜大小
if (!Magnifier.offsetHeight) {
Magnifier.style.width = this.offsetWidth "px";
Magnifier.style.height = this.offsetHeight "px";
}
//遮罩层大소화소소图一样
마스크.스타일.불투명도 = "0";
Mask.style.width = this.width 'px';
Mask.style.height = this.height "px";
마스크.스타일.zIndex = 2;
bigDiv.style.left = this.width 5 "px";
bigDiv.style.top = "-5px";
}
smallDiv.appendChild(마스크);
smallDiv.appendChild(미러);
smallDiv.appendChild(smallImg);
//视窗
var bigDiv = $Create("div");
bigDiv.setAttribute("id", "big");
bigDiv.style.position = "절대";
bigDiv.style.overflow = "숨김";
bigDiv.style.display = "없음";
var bigImg = $Create("img");
bigImg.setAttribute("src", bImg);
bigImg.setAttribute("id", "bigImg");
bigImg.style.position = "절대";
bigDiv.appendChild(bigImg);
Magnifier.appendChild(smallDiv);
Magnifier.appendChild(bigDiv);
}
함수 setMagnifierStyle(mirrorStyle,shichuangStyle) {
//거울
for (mirrorStyle의 var 항목) {
미러.스타일[항목] = 미러스타일[항목];
}
for (shichuangStyle의 var 항목) {
$("big").style[item] = 시추앙스타일[item];
}
}
함수 레지스터이벤트() {
$("mask").onmouseover = 함수 () {
$("big").style.display = "차단";
mirror.style.display = "차단";
}
$("mask").onmouseout = 함수 () {
$("big").style.display = "없음";
mirror.style.display = "없음";
}
$("mask").onmousemove = 함수(evt) {
var oEvent = evt || 이벤트;
var disX = oEvent.offsetX;
var disY = oEvent.offsetY;
var mirrorLeft = disX - mirror.offsetWidth / 2;
var mirrorTop = disY - mirror.offsetHeight / 2;
if (mirrorLeft < 0) {
미러왼쪽 = 0;
}
else if (mirrorLeft > Mask.offsetWidth - mirror.offsetWidth) {
mirrorLeft = 마스크.offsetWidth - mirror.offsetWidth;
}
if (mirrorTop < 0) {
미러탑 = 0;
}
else if (mirrorTop > Mask.offsetHeight - mirror.offsetHeight) {
mirrorTop = 마스크.오프셋높이 - 미러.오프셋높이;
}
mirror.style.top = 미러탑 "px";
mirror.style.left = mirrorLeft "px";
var paX = mirrorTop / (mask.offsetHeight - mirror.offsetHeight);
var paY = mirrorLeft / (mask.offsetWidth - mirror.offsetWidth);
$("bigImg").style.top = -paX * ($("bigImg").offsetHeight - $("big").offsetHeight) "px";
$("bigImg").style.left = -paY * ($("bigImg").offsetWidth - $("big").offsetWidth) "px";
}
}
$(id) 함수 {
return document.getElementById(id);
}
함수 $Create(유형) {
return document.createElement(type);
}
最后再 onload소소한 용도의 다운로드:
window.onload = 함수() {
createElement("돋보기", "images/Magnifier/small.jpg", "images/Magnifier/big.jpg");
setMagnifierStyle({ "너비": "30px", "높이": "30px", "배경색상": "#fff" }, { "너비": "250px", "높이": "250px" });
등록이벤트();
}
效果总算판매来了耶,
2. 接下来咱们封装吧:
Magnifer类代码:
기능돋보기(
Magnifierid, // 미러 컨테이너 ID 확대
sImg, bImg, 때문에 MirrorStyle, //소형렌즈 스타일에서는 json 형식의 데이터
> ) {
var _this = this;
This.MagnifierContainer = null; //컨테이너
This.smallDiv = null; //작은 이미지 컨테이너
This.mask = null; //작은 이미지 마스크 레이어
~ This.smallImg = null; //작은 이미지
This.bigDiv = null; //미리보기
This.bigImg = null; var init = 함수 () {
_this.MagnifierContainer = _this.$(MagnifierId);
_this.createElement(sImg, bImg);
_this.setMagnifierStyle(mirrorStyle, ViewStyle);
_this.MainEvent();
}
init();
}
Magnifier.prototype.createElement = 함수(sImg, bImg) {
var _this = this;
var $Create = this.$Create;
This.MagnifierContainer.style.position = 'relative'; //문서 흐름에서 벗어나 적절하게 수정
This.smallDiv = $Create("div");
This.smallDiv.setAttribute("id", "small");
This.smallDiv.style.position = "절대";
This.mask = $Create("div");
This.mask.setAttribute("id", "mask");
This.mask.style.position = "절대";
This.mirror = $Create("div");
This.mirror.setAttribute("id", "mirror");
This.mirror.style.opacity = 0.3;
This.mirror.style.position = "절대";
This.mirror.style.display = "없음";
This.smallImg = $Create("img");
This.smallImg.setAttribute("src", sImg);
This.smallImg.setAttribute("id", "smallImg");
This.smallImg.onload = 함수() {
//돋보기의 높이나 너비가 설정되지 않은 경우 썸네일 크기에 맞춰 돋보기의 크기를 설정합니다
If (!_this.MagnifierContainer.offsetHeight) {
_this.MagnifierContainer.style.width = this.offsetWidth "px";
_this.MagnifierContainer.style.height = this.offsetHeight "px";
}
//마스크 레이어의 크기는 작은 이미지와 동일합니다
_this.mask.style.opacity = "0";
_this.mask.style.width = this.offsetWidth 'px';
_this.mask.style.height = this.offsetHeight "px";
_this.mask.style.zIndex = 2;
_this.bigDiv.style.left = this.offsetWidth 5 "px";
_this.bigDiv.style.top = "-5px";
}
This.smallDiv.appendChild(this.mask);
This.smallDiv.appendChild(this.mirror);
This.smallDiv.appendChild(this.smallImg);
This.bigDiv = $Create("div");
This.bigDiv.setAttribute("id", "big");
This.bigDiv.style.position = "절대";
This.bigDiv.style.overflow = "숨김";
This.bigDiv.style.display = "없음";
This.bigImg = $Create("img");
This.bigImg.setAttribute("src", bImg);
This.bigImg.setAttribute("id", "bigImg");
This.bigImg.style.position = "절대";
This.bigDiv.appendChild(this.bigImg);
This.MagnifierContainer.appendChild(this.smallDiv);
This.MagnifierContainer.appendChild(this.bigDiv);
}
Magnifier.prototype.setMagnifierStyle = 함수(mirrorStyle, ViewStyle) {
for (mirrorStyle의 var 항목) {
this.mirror.style[item] = 미러스타일[item];
}
항목 삭제;
for (ViewStyle의 var 항목) {
this.bigDiv.style[item] = 뷰스타일[item];
}
}
Magnifier.prototype.MainEvent = 함수() {
var _this = this;
this.mask.onmouseover = 함수() {
_this.bigDiv.style.display = "차단";
_this.mirror.style.display = "차단";
}
this.mask.onmouseout = 함수 () {
_this.bigDiv.style.display = "없음";
_this.mirror.style.display = "없음";
}
this.mask.onmousemove = 함수(evt) {
var oEvent = evt || 이벤트;
var disX = oEvent.offsetX || oEvent.layerX; //兼容ff
var disY = oEvent.offsetY || oEvent.layerY;
var mirrorLeft = disX - _this.mirror.offsetWidth / 2;
var mirrorTop = disY - _this.mirror.offsetHeight / 2;
if (mirrorLeft < 0) {
미러왼쪽 = 0;
}
else if (mirrorLeft > this.offsetWidth - _this.mirror.offsetWidth) {
mirrorLeft = this.offsetWidth - mirror.offsetWidth;
}
if (mirrorTop < 0) {
미러탑 = 0;
}
else if (mirrorTop > this.offsetHeight - _this.mirror.offsetHeight) {
mirrorTop = this.offsetHeight - _this.mirror.offsetHeight;
}
_this.mirror.style.top = 미러탑 "px";
_this.mirror.style.left = 미러왼쪽 "px";
var paX = mirrorTop / (this.offsetHeight - _this.mirror.offsetHeight);
var paY = mirrorLeft / (this.offsetWidth - _this.mirror.offsetWidth);
_this.bigImg.style.top = -paX * (_this.bigImg.offsetHeight - _this.bigDiv.offsetHeight) "px";
_this.bigImg.style.left = -paY * (_this.bigImg.offsetWidth - _this.bigDiv.offsetWidth) "px";
}
}
Magnifier.prototype.$ = 함수(id) {
return document.getElementById(id);
}
Magnifier.prototype.$Create = 함수(유형) {
return document.createElement(type);
}
最后재onload调사용 다운로드:
window.onload = 함수() {
새로운 돋보기(
"돋보기",
"이미지/돋보기/small.jpg",
"이미지/돋보기/big.jpg",
{ "너비": "30px", "높이": "30px", "배경색상": "#fff" },
{ "너비": "250px", "높이": "250px" }
);
}
以上就是本文所述의 전체 부서 内容了, 希望大家能够喜欢。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
