原生js实现的放大镜效果
这是我用原生js写的放大镜效果,与各种各样的框架技术相比,我喜欢使用原生的js,在这里,想和大家一起谈谈原生和框架技术的理解与个人喜好。
<!DOCTYPE HTML> <html> <head> <title>js放大镜效果</title> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <style> *{ margin:0px; padding:0px; border:none; list-style:none; } #box{ margin:80px auto; width: 352px; } #box p { width: 350px; height: 350px; border: 1px solid #ddd; margin-bottom: 5px; } #box p img { width:350px; height:350px; } #box h1 { width: 352px; height: 54px; overflow:hidden; position:relative; } #box h1 div { width:310px; height: 54px; margin:0px auto; position:relative; } #box h1 div ul { position:absolute; left: 0px; top: 0px; } #box h1 ul li { width: 62px; float: left; } #box h1 ul li img { width: 50px; height: 50px; padding: 1px; border: 1px solid #CECFCE; } #box h1 img.hoveredThumb{ border: 2px solid #e4393c; padding: 0; } /*中等大小的图片显示区域*/ p#medImgBox{ position: relative; } #jing{ position: absolute; left: 0; top: 0; width: 175px; height: 175px; border-radius:50%; background: #ffd; opacity: 0.7; display: none; } /*悬于图片/jing上方的专用于接收鼠标移动事件的 一个完全透明的层*/ #medImgBox #mian{ display: block; position: absolute; width: 100%; height: 100%; top: 0; left: 0; cursor: move; opacity: 0; } /** 大图显示区域 **/ #largeImgBox{ position:absolute; width: 175px; height: 175px; border-radius:50%; border: 1px solid #faa; top: 0px; left: 352px; overflow: hidden; display: none; } #largeImg{ display: none; position: absolute; } </style> </head> <body > <div id="box"> <p id="medImgBox"> <img src="/static/imghw/default1.png" data-src="images/product-s1-m.jpg" class="lazy" id="mediumImg" / alt="原生js实现的放大镜效果" > <span id="jing"></span> <span id="mian"></span> <span id="largeImgBox"> <img src="/static/imghw/default1.png" data-src="images\product-s1.jpg" class="lazy" id="largeImg"/ alt="原生js实现的放大镜效果" > </span> </p> <h1> <div> <ul id="list"> <li><img src="/static/imghw/default1.png" data-src="images\product-s1.jpg" class="lazy" / alt="原生js实现的放大镜效果" ></li> <li><img src="/static/imghw/default1.png" data-src="images\product-s2.jpg" class="lazy" / alt="原生js实现的放大镜效果" ></li> <li><img src="/static/imghw/default1.png" data-src="images\product-s3.jpg" class="lazy" / alt="原生js实现的放大镜效果" ></li> <li><img src="/static/imghw/default1.png" data-src="images\product-s4.jpg" class="lazy" / alt="原生js实现的放大镜效果" ></li> <li><img src="/static/imghw/default1.png" data-src="images\product-s1.jpg" class="lazy" / alt="原生js实现的放大镜效果" ></li> </ul> </div> </h1> </div> <script> var imgList = document.querySelectorAll('#box ul li img'); for(var i=0; i<imgList.length; i++){ var img = imgList[i]; img.onmouseover = changeThumbImg; } function changeThumbImg(){ var previousHovered = document.querySelector('.hoveredThumb'); if(previousHovered==null){ this.className = 'hoveredThumb'; changeMediumImg(this.src); //修改中等图片的src }else if(previousHovered!=this){ previousHovered.removeAttribute('class'); this.className = 'hoveredThumb'; changeMediumImg(this.src); //修改中等图片的src } } function changeMediumImg(thumbSrc){ var dotIndex = thumbSrc.lastIndexOf('.'); var prefix = thumbSrc.substring(0, dotIndex); var suffix = thumbSrc.substring(dotIndex); var mediumSrc = prefix + '-m'+suffix; document.getElementById('mediumImg').src = mediumSrc; } /** 为放大镜jing添加鼠标移动事件 **/ document.querySelector('#mian').onmousemove = function(event){ var x = event.offsetX; //事件相对于事件源的偏移量 var y = event.offsetY; var jing = document.getElementById('jing'); var w = jing.offsetWidth; //jing的宽和高 var h = jing.offsetHeight; var left = x<w/2 ? 0 : (x-w/2); var top = y<h/2 ? 0 : (y-h/2); if(x>(w*2-w/2)){ left = w*2 - w; } if(y>(h*2-h/2)){ top = h*2 - h; } jing.style.left = left+'px'; jing.style.top = top+'px'; //修改大图的位置/ var largeImg = document.getElementById('largeImg'); largeImg.style.left = (-left*largeImg.width/350) + 'px'; largeImg.style.top = (-top*largeImg.height/350)+'px'; } document.querySelector('#mian').onmouseover = function(){ //显示jing var jing = document.getElementById('jing'); jing.style.display = 'block'; var largeImgBox = document.getElementById('largeImgBox'); largeImgBox.style.display = 'block'; //获取当前要显示的大图的src var src = document.querySelector('#mediumImg').src; var dotIndex = src.lastIndexOf('.'); var prefix = src.substring(0, dotIndex-2); var suffix = src.substring(dotIndex); src = prefix + '-l'+ suffix; var largeImg = document.getElementById('largeImg'); largeImg.src = src; largeImg.style.display='block'; } document.querySelector('#mian').onmouseout = function(){ //除去jing var jing = document.getElementById('jing'); jing.style.display = 'none'; //除去大图显示区 document.getElementById('largeImgBox').style.display = 'none'; } </script> </body> </html>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Soalan dan penyelesaian yang sering ditanya untuk percetakan tiket kertas terma depan dalam pembangunan front-end, percetakan tiket adalah keperluan umum. Walau bagaimanapun, banyak pemaju sedang melaksanakan ...

Tidak ada gaji mutlak untuk pemaju Python dan JavaScript, bergantung kepada kemahiran dan keperluan industri. 1. Python boleh dibayar lebih banyak dalam sains data dan pembelajaran mesin. 2. JavaScript mempunyai permintaan yang besar dalam perkembangan depan dan stack penuh, dan gajinya juga cukup besar. 3. Faktor mempengaruhi termasuk pengalaman, lokasi geografi, saiz syarikat dan kemahiran khusus.

Bagaimana cara menggabungkan elemen array dengan ID yang sama ke dalam satu objek dalam JavaScript? Semasa memproses data, kita sering menghadapi keperluan untuk mempunyai id yang sama ...

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Perbincangan mendalam mengenai punca-punca utama perbezaan dalam output konsol.log. Artikel ini akan menganalisis perbezaan hasil output fungsi Console.log dalam sekeping kod dan menerangkan sebab -sebab di belakangnya. � ...

Sebaik sahaja anda telah menguasai tutorial TypeScript peringkat kemasukan, anda harus dapat menulis kod anda sendiri dalam IDE yang menyokong TypeScript dan menyusunnya ke dalam JavaScript. Tutorial ini akan menyelam ke dalam pelbagai jenis data dalam TypeScript. JavaScript mempunyai tujuh jenis data: null, undefined, boolean, nombor, rentetan, simbol (diperkenalkan oleh ES6) dan objek. Typescript mentakrifkan lebih banyak jenis atas dasar ini, dan tutorial ini akan meliputi semuanya secara terperinci. Jenis data null Seperti JavaScript, Null dalam TypeScript

Perbincangan mengenai realisasi kesan animasi tatal dan elemen Parallax dalam artikel ini akan meneroka bagaimana untuk mencapai yang serupa dengan laman web rasmi Shiseido (https://www.shiseido.co.jp/sb/wonderland/) ... ...

JavaScript boleh dijalankan di PowerPoint, dan boleh dilaksanakan dengan memanggil fail JavaScript luaran atau membenamkan fail HTML melalui VBA. 1. Untuk menggunakan VBA untuk memanggil fail JavaScript, anda perlu mendayakan makro dan mempunyai pengetahuan pengaturcaraan VBA. 2. Benamkan fail HTML yang mengandungi JavaScript, yang mudah dan mudah digunakan tetapi tertakluk kepada sekatan keselamatan. Kelebihan termasuk fungsi lanjutan dan fleksibiliti, sementara kelemahan melibatkan keselamatan, keserasian dan kerumitan. Dalam praktiknya, perhatian harus dibayar kepada keselamatan, keserasian, prestasi dan pengalaman pengguna.
