當前位置:首頁 > 科技  > 軟件

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

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

    譯者 | 布加迪hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    審校 | 重樓hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

    hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    一種無縫銜接的方式構(gòu)建圖像放大鏡可能是個挑戰(zhàn)。但是逐步完成這些步驟將幫助您從頭開始創(chuàng)建自己的圖像放大鏡,無需依賴第三方插件。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    何時在Web項目中使用圖像放大鏡

    當您構(gòu)建有很多圖像的項目時,圖像放大鏡派上用場。如前所述,圖像放大鏡在購物網(wǎng)站上很受歡迎,因為有時用戶可能需要在決定是否值得購買之前仔細觀察產(chǎn)品。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    客戶完全依賴網(wǎng)站提供的信息和視覺效果來評估產(chǎn)品的質(zhì)量、功能和外觀。然而,光靠靜態(tài)圖像可能并不總是提供足夠的清晰度或便于全面評估產(chǎn)品hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    在傳統(tǒng)商店里,顧客可以親自觸摸產(chǎn)品,近距離仔細觀察,并評估適用性之后決定購買。圖像放大鏡試圖通過以虛擬方式為用戶提供一種相似的審查和檢查來重現(xiàn)這種體驗。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

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

    該項目中使用的代碼放在GitHub代碼倉庫中,可供人們免費使用,采用MIT許可證。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

    <!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標簽中,創(chuàng)建一個類名為header”的div元素。然后在headerdiv中,添加h1標題元素來顯示圖像放大鏡的標題。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

    在標題部分之后,創(chuàng)建一個類名為container”的div元素。在這個div中,添加另一個類名為magnifier”的div元素,并運用“hidden類將其隱藏起來hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

    <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預處理器。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    :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。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

    將提取的寬度賦予變量magnifierWidth,將提取的高度賦予變量magnifierHeight。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    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"));

    接下來,為縮放級別、最大縮放級別以及光標和放大鏡圖像的位置設(shè)置變量。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

    在上面的代碼塊中,pointerX和pointerY都表示光標在X和Y軸上的位置。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

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

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

    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事件的窗口對象添加一個事件偵聽器,當用戶按下ArrowUpArrowDown鍵時,可調(diào)整縮放級別。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

    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事件容器元素添加事件偵聽器。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

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

    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事件,并在鼠標離開容器區(qū)域時hidden類添回到放大鏡元素。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

    最后,為更新光標的x和y位置的mousmove事件向窗口對象添加事件偵聽器。hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

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

    hN828資訊網(wǎng)——每日最新資訊www.ut100.cn

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

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

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

    原文標題:How to Build an Image Magnifier With Vanilla JavaScript,作者:DAVID UZONDUhN828資訊網(wǎng)——每日最新資訊www.ut100.cn

    本文鏈接:http://www.www.ut100.cn/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模型訓練穩(wěn)定性

    標簽:
    • 熱門焦點
    • 6月安卓手機性價比榜:Note 12 Turbo斷層式碾壓

      6月份有一個618,雖然這是京東周年慶的日子,但別的電商也都不約而同的跟進了,反正促銷沒壞處,廠商和用戶都能滿意。618期間一些產(chǎn)品也出現(xiàn)了歷史低價,那么各個價位段的產(chǎn)品性價比
    • Golang 中的 io 包詳解:組合接口

      io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是對Reader和Writer接口的組合,
    • 讓我們一起聊聊文件的操作

      文件【1】文件是什么?文件是保存數(shù)據(jù)的地方,是數(shù)據(jù)源的一種,比如大家經(jīng)常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數(shù)據(jù),它既可以保
    • 每天一道面試題-CPU偽共享

      前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
    • 使用AIGC工具提升安全工作效率

      在日常工作中,安全人員可能會涉及各種各樣的安全任務(wù),包括但不限于:開發(fā)某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
    • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

      來源:直播觀察提起&ldquo;馮提莫&rdquo;這個名字,很多網(wǎng)友或許聽過,但應(yīng)該不記得她是哪位主播了。其實,作為曾經(jīng)的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現(xiàn)
    • 華為和江淮汽車合作開發(fā)百萬元問界MPV?雙方回應(yīng)來了

      8月1日消息,郭明錤今天在社交平臺發(fā)文稱,華為正在和江淮汽車合作,開發(fā)售價在100萬元的問界MPV,預計在2024年第2季度量產(chǎn),銷量目標為上市首年交付5萬輛。
    • 超閉合精工鉸鏈 徹底消滅縫隙 三星Galaxy Z Flip5與Galaxy Z Fold5發(fā)布

      2023年7月26日,三星電子正式發(fā)布了Galaxy Z Flip5與Galaxy Z Fold5。三星新一代折疊屏手機采用超閉合精工鉸鏈,讓折疊后的縫隙不再可見。同時,配合處
    • iQOO 11S或7月上市:搭載“雞血版”驍龍8Gen2 史上最強5G Soc

      去年底,iQOO推出了“電競旗艦”iQOO 11系列,作為一款性能強機,iQOO 11不僅全球首發(fā)2K 144Hz E6全感屏,搭載了第二代驍龍8平臺及144Hz電競屏,同時在快充
    Top