国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當(dāng)前位置:首頁 > 科技  > 軟件

如何使用JavaScript創(chuàng)建一只圖像放大鏡?

來源: 責(zé)編: 時間:2023-08-05 11:45:41 4981觀看
導(dǎo)讀譯者 | 布加迪審校 | 重樓如果您曾經(jīng)瀏覽過購物網(wǎng)站,可能遇到過圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個小小的重要功能可以大大改善您網(wǎng)站的用戶體驗。以一種無縫銜接的方式構(gòu)建圖像放大鏡可能

譯者 | 布加迪s1Z28資訊網(wǎng)——每日最新資訊28at.com

審校 | 重樓s1Z28資訊網(wǎng)——每日最新資訊28at.com

如果您曾經(jīng)瀏覽過購物網(wǎng)站,可能遇到圖像放大功能。它可以讓您放大圖像的特定區(qū)域,以便瀏覽。結(jié)合這個小小的重要功能可以大大改善您網(wǎng)站的用戶體驗。s1Z28資訊網(wǎng)——每日最新資訊28at.com

s1Z28資訊網(wǎng)——每日最新資訊28at.com

如果您正在構(gòu)建一個照片庫應(yīng)用程序,圖像放大鏡也派上用場,因為放大圖像的特定部分是一重要功能。s1Z28資訊網(wǎng)——每日最新資訊28at.com

構(gòu)建圖像放大鏡

該項目中使用的代碼放在GitHub代碼倉庫中,可供人們免費(fèi)使用,采用MIT許可證。s1Z28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建一個文件夾,在該文件夾中添加index.html文件、style.css文件和main.js文件。將這個樣板代碼添加到index.html中s1Z28資訊網(wǎng)——每日最新資訊28at.com

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Image Magnifier</title> <link rel="stylesheet" href="style.css" /></head><body></body></html>

body標(biāo)簽中,創(chuàng)建一個類名為header”的div元素。然后在headerdiv中,添加h1標(biāo)題元素來顯示圖像放大鏡的標(biāo)題。s1Z28資訊網(wǎng)——每日最新資訊28at.com

您可以根據(jù)需要來定制文本。接下來,包括兩個span元素,它們提供使用放大鏡的說明,并向用戶顯示當(dāng)前縮放級別。s1Z28資訊網(wǎng)——每日最新資訊28at.com

在標(biāo)題部分之后,創(chuàng)建一個類名為container”的div元素。在這個div中,添加另一個類名為magnifier”的div元素,并運(yùn)用“hidden類將其隱藏起來s1Z28資訊網(wǎng)——每日最新資訊28at.com

這個元素將表示放大鏡圖像。然后,添加一個script標(biāo)簽,src屬性設(shè)置為/main.jss1Z28資訊網(wǎng)——每日最新資訊28at.com

<body> <class="header"> <h1>Image Magnifier</h1> <span>Press <strong>Arrow Up</strong> or <strong>Arrow Down</strong> to increase or decrease athe zoom level.</span> <span>Zoom Level: <strong class="zoom-level">1</strong></span> </div> <class="container"> <class="magnifier hidden"></div> </div> <script src="/main.js"></script></body>

把style.css文件中的代碼換成以下代碼。需要的話,您還可以使用Less之類的CSS預(yù)處理器。s1Z28資訊網(wǎng)——每日最新資訊28at.com

:root { --magnifier-width: 150; --magnifier-height: 150;}body { display: flex; flex-direction: column; align-items: center;}.container { width: 400px; height: 300px; background-size: cover; background-image: url("https://cdn.pixabay.com/photo/2019/03/27/15/24/animal-4085255_1280.jpg"); background-repeat: no-repeat; position: relative; cursor: none;}.magnifier { border-radius: 400px; box-shadow: 0px 11px 8px 0px #0000008a; position: absolute; width: calc(var(--magnifier-width) * 1px); height: calc(var(--magnifier-height) * 1px); cursor: none; background-image: url("https://cdn.pixabay.com/photo/2019/03/27/15/24/animal-4085255_1280.jpg"); background-repeat: no-repeat;}span { display: block;}.header { display: flex; flex-direction: column; align-items: center;}.hidden { visibility: hidden;}> span:nth-child(3) { font-size: 20px;

在main.js文件中,使用document.querySelector方法檢索帶有類名放大鏡容器”的HTML元素并將它們分別賦予給變量magnifier和變量container。s1Z28資訊網(wǎng)——每日最新資訊28at.com

然后,使用getComputedStyle函數(shù)檢索放大鏡元素的寬度和高度,然后使用substring和indexOf方法從返回的字符串中提取數(shù)值。s1Z28資訊網(wǎng)——每日最新資訊28at.com

將提取的寬度賦予變量magnifierWidth,將提取的高度賦予變量magnifierHeight。s1Z28資訊網(wǎng)——每日最新資訊28at.com

let magnifier = document.querySelector(".magnifier");let container = document.querySelector(".container");let magnifierWidth = getComputedStyle(magnifier).width.substring(  0,   getComputedStyle(magnifier).width.indexOf("p"));let magnifierHeight = getComputedStyle(magnifier).width.substring(   0,  getComputedStyle(magnifier).height.indexOf("p"));

接下來,為縮放級別、最大縮放級別以及光標(biāo)和放大鏡圖像的位置設(shè)置變量。s1Z28資訊網(wǎng)——每日最新資訊28at.com

let zoomLevelLabel = document.querySelector(".zoom-level");let zoom = 2;let maxZoomLevel = 5;let pointerX;let pointerY;let magnifyX;let magnifyY;

在上面的代碼塊中,pointerX和pointerY都表示光標(biāo)在X和Y軸上的位置。s1Z28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)在,定義兩個輔助函數(shù)getZoomLevel返回當(dāng)前縮放級別和getPointerPosition返回帶有光標(biāo)x坐標(biāo)和y坐標(biāo)的對象s1Z28資訊網(wǎng)——每日最新資訊28at.com

function getZoomLevel() { return zoom;}function getPointerPosition() { return { x: pointerX, y: pointerY }}

接下來,創(chuàng)建一個updateMagImage函數(shù),該函數(shù)使用當(dāng)前光標(biāo)位置創(chuàng)建一個新的MouseEvent對象,并將其分派給容器元素。這個函數(shù)負(fù)責(zé)更新放大鏡圖像。s1Z28資訊網(wǎng)——每日最新資訊28at.com

function updateMagImage() { let evt = new MouseEvent("mousemove", { clientX: getPointerPosition().x, clientY: getPointerPosition().y, bubbles: true, cancelable: true, view: window, }); container.dispatchEvent(evt);}

現(xiàn)在,您應(yīng)該為keyup事件的窗口對象添加一個事件偵聽器,當(dāng)用戶按下ArrowUpArrowDown鍵時,可調(diào)整縮放級別。s1Z28資訊網(wǎng)——每日最新資訊28at.com

keyup事件上的回調(diào)函數(shù)還負(fù)責(zé)更新縮放級別標(biāo)簽并觸發(fā)updateMagImage函數(shù)。s1Z28資訊網(wǎng)——每日最新資訊28at.com

window.addEventListener("keyup", (e) => { if (e.key === "ArrowUp" && maxZoomLevel - Number(zoomLevelLabel.textContent) !== 0) { zoomLevelLabel.textContent = +zoomLevelLabel.textContent + 1; zoom = zoom + 0.3; updateMagImage(); } if (e.key === "ArrowDown" && !(zoomLevelLabel.textContent <= 1)) { zoomLevelLabel.textContent = +zoomLevelLabel.textContent - 1; zoom = zoom - 0.3; updateMagImage(); }});

然后針對“mousemove事件容器元素添加事件偵聽器。s1Z28資訊網(wǎng)——每日最新資訊28at.com

在回調(diào)函數(shù)中,添加從放大鏡元素中移除hidden類以使其可見的功能,并計算鼠標(biāo)相對容器的位置,考慮到頁面滾動。s1Z28資訊網(wǎng)——每日最新資訊28at.com

該函數(shù)還應(yīng)該將放大鏡的變換樣式設(shè)置為計算位置,并根據(jù)縮放級別和鼠標(biāo)位置確定放大鏡圖像的背景大小和位置。s1Z28資訊網(wǎng)——每日最新資訊28at.com

container.addEventListener("mousemove", (e) => { magnifier.classList.remove("hidden"); let rect = container.getBoundingClientRect(); let x = e.pageX - rect.left; let y = e.pageY - rect.top; x = x - window.scrollX; y = y - window.scrollY; magnifier.style.transform = `translate(${x}px, ${y}px)`; const imgWidth = 400; const imgHeight = 300; magnifier.style.backgroundSize = imgWidth * getZoomLevel() + "px " + imgHeight * getZoomLevel() + "px"; magnifyX = x * getZoomLevel() + 15; magnifyY = y * getZoomLevel() + 15; magnifier.style.backgroundPosition = -magnifyX + "px " + -magnifyY + "px";});

然后向容器元素添加另一個事件偵聽器,但這一事件偵聽器應(yīng)該偵聽mouseout事件,并在鼠標(biāo)離開容器區(qū)域時hidden類添回到放大鏡元素。s1Z28資訊網(wǎng)——每日最新資訊28at.com

container.addEventListener("mouseout", () => { magnifier.classList.add("hidden");});

最后,為更新光標(biāo)的x和y位置的mousmove事件向窗口對象添加事件偵聽器。s1Z28資訊網(wǎng)——每日最新資訊28at.com

window.addEventListener("mousemove", (e) => { pointerX = e.clientX; pointerY = e.clientY;});

就是這樣您已成功地使用普通JavaScript構(gòu)建了一個圖像放大鏡。s1Z28資訊網(wǎng)——每日最新資訊28at.com

s1Z28資訊網(wǎng)——每日最新資訊28at.com

圖像放大鏡如何改善用戶體驗

通過允許用戶放大圖像的特定區(qū)域,放大鏡可以讓他們更清晰地觀察產(chǎn)品細(xì)節(jié)。s1Z28資訊網(wǎng)——每日最新資訊28at.com

這種增強(qiáng)的視覺探索水平給用戶灌輸了信心,因為他們可以做出明智的決定。這有助于提高轉(zhuǎn)化率和提高客戶保留率。s1Z28資訊網(wǎng)——每日最新資訊28at.com

原文標(biāo)題:How to Build an Image Magnifier With Vanilla JavaScript,作者:DAVID UZONDUs1Z28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.rrqrq.com/showinfo-26-126-0.html如何使用JavaScript創(chuàng)建一只圖像放大鏡?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 三言兩語說透柯里化和反柯里化

下一篇: 谷歌KDD'23工作:如何提升推薦系統(tǒng)Ranking模型訓(xùn)練穩(wěn)定性

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
国产亚洲精品资源在线26u| 日韩一区二区在线免费观看| 1000部精品久久久久久久久| 亚洲精品免费播放| 中文字幕不卡在线| 国产精品久久福利| 中文字幕精品综合| 亚洲三级电影网站| 亚洲一区二区免费视频| 日韩专区中文字幕一区二区| 五月婷婷色综合| 麻豆视频一区二区| 国产成人亚洲综合a∨猫咪| 丁香啪啪综合成人亚洲小说| 不卡av电影在线播放| 欧美区国产区| 99av国产精品欲麻豆| 午夜亚洲视频| 欧美日韩一区二区三区免费看| 欧美肥大bbwbbw高潮| 精品少妇一区二区三区| 欧美激情一区三区| 日韩欧美一区二区久久婷婷| 亚洲精品v日韩精品| 一区二区三区在线不卡| 日韩在线一区二区三区| 精品一区二区影视| 成人国产免费视频| 亚洲天堂偷拍| 在线视频你懂得一区二区三区| 欧美日韩精品二区第二页| 欧美电视剧在线观看完整版| 中文久久乱码一区二区| 日韩中文字幕麻豆| 波多野结衣中文字幕一区二区三区 | 国产精品色网| 3atv一区二区三区| ...xxx性欧美| 日本色综合中文字幕| 粉嫩蜜臀av国产精品网站| 色综合天天综合狠狠| 国产精品综合| 日韩美女在线视频 | 国产一区在线不卡| 黄色av一区| 欧美日韩视频第一区| 国产精品理论片| 九色综合国产一区二区三区| 午夜视频精品| 欧美日本一区二区三区四区 | 国产精品99久久久久久似苏梦涵 | 亚洲精品美女久久7777777| 欧美视频一区二区三区四区| 欧美国产丝袜视频| 久久精品国内一区二区三区| 欧美日韩在线一区二区三区| 亚洲无线码一区二区三区| 日本一区中文字幕| 91蜜桃婷婷狠狠久久综合9色| 久久综合九色99| 国产精品拍天天在线| 久久精品国产免费| 99成人精品| 久久奇米777| 久久99精品网久久| 亚洲综合社区| 国产精品久久久久毛片软件| 国产成人亚洲综合色影视| 久久高清国产| 中文字幕亚洲精品在线观看| 成人精品在线视频观看| 一本久久a久久免费精品不卡| 国产精品久久久久久久久久久免费看 | 欧美福利一区二区| 精品少妇一区二区三区免费观看| 无码av免费一区二区三区试看| 欧美99在线视频观看| 欧美老女人在线| 免费视频一区二区| 午夜亚洲精品| 亚洲一区二区五区| 99riav1国产精品视频| 欧美激情在线一区二区| 99久久国产免费看| 精品少妇一区二区| 成人精品视频网站| 日韩一区二区在线观看视频播放| 美女一区二区在线观看| 久久一区二区三区四区五区 | 丰满少妇久久久久久久| 欧美日韩国产综合久久| 美女视频黄a大片欧美| 免播放器亚洲| 日韩影院免费视频| 久久精品道一区二区三区| 亚洲小说欧美激情另类| 国产美女精品| 亚洲一区二区视频在线观看| 亚洲欧美日韩精品综合在线观看 | 91在线视频播放| 久久免费午夜影院| 91蜜桃在线免费视频| 国产伦精品一区二区三区照片91 | 91精品福利视频| 青娱乐精品视频| 在线观看日韩高清av| 久久精品国产在热久久| 欧美性生活影院| 国产精品正在播放| 日韩欧美亚洲国产精品字幕久久久 | 夜夜操天天操亚洲| 美女久久网站| 久久国产日韩欧美精品| 欧美精品视频www在线观看| 国产传媒一区在线| www国产成人免费观看视频 深夜成人网 | 国产色婷婷亚洲99精品小说| 欧美一区成人| 亚洲人成在线播放网站岛国| 国产精品一国产精品k频道56| 亚洲国产综合在线| 欧美视频日韩视频在线观看| 国产成人午夜精品影院观看视频 | 日本最新不卡在线| 69av一区二区三区| 欧美成人首页| 亚洲一区二区中文在线| 91国偷自产一区二区开放时间 | 久久蜜桃一区二区| 亚洲精选成人| 麻豆精品精品国产自在97香蕉| 911国产精品| 国产精品九九| 日本不卡视频一二三区| 欧美r级在线观看| 99国产精品久久久久久久 | 美女日韩在线中文字幕| 国产成人综合在线观看| 中文久久乱码一区二区| 另类av一区二区| 成人免费视频国产在线观看| 国产精品丝袜91| 在线观看91视频| 成人avav在线| 国产精品国产精品国产专区不蜜| 国产精品视频免费观看| 国产在线不卡视频| 中文字幕日韩精品一区| 色哟哟国产精品| 欧美天天在线| 久久国产麻豆精品| 中文字幕亚洲区| 91精品国产综合久久久久久久| 尤物精品在线| 国产91精品精华液一区二区三区| 亚洲精品乱码久久久久久久久| 91精品国产麻豆| 午夜在线精品偷拍| 91丨porny丨蝌蚪视频| 蜜桃av一区二区| 亚洲欧美色图小说| 亚洲精品一区二区在线观看| 久久精品123| 黄色亚洲在线| 丁香婷婷综合激情五月色| 亚洲国产精品欧美一二99| 久久人人爽爽爽人久久久| 在线观看av不卡| 国产欧美精品一区二区色综合 | 91精品福利在线| 亚洲激情婷婷| 99久久久久久| 精品在线一区二区三区| 亚洲在线视频免费观看| 久久麻豆一区二区| 91精品欧美久久久久久动漫| 色综合激情五月| 一本不卡影院| 国产真实久久| 91麻豆免费看片| 国产999精品久久久久久绿帽| 美女网站色91| 三级欧美在线一区| 亚洲一区在线免费观看| 中文字幕一区二区三区在线不卡| 精品久久久久av影院| 欧美一区二区在线免费观看| 色偷偷一区二区三区| 亚洲影院免费| 宅男噜噜噜66国产日韩在线观看| 国产精品yjizz| 欧美1区2区| 午夜精品久久| 国内精品久久国产| 欧美日韩一区二区视频在线观看| 成人av在线网站| a美女胸又www黄视频久久| 不卡免费追剧大全电视剧网站| 国产精品一线二线三线精华| 国产在线精品免费av|