最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生js代碼實現(xiàn)圖片放大境效果

 更新時間:2016年10月30日 09:58:47   投稿:mrr  
今天小編給大家分享兩種使用js寫的圖片放大鏡效果,原理都差不多,都是采用了兩張圖片給兩張圖片設(shè)定相應(yīng)的尺寸,最后顯示在不同位置,最終實現(xiàn)放大效果,感興趣的朋友一起看看吧

今天我給大家分享一下自己用js寫的一個圖片放大器效果,我做了兩種效果的放大,其實它們的原理都差不多,都是采用了兩張圖片給兩張圖片設(shè)定相應(yīng)的尺寸,最后顯示在不同位置,最終實現(xiàn)放大效果。

第一種是我仿照淘寶購物頁面的一個放大鏡效果,當鼠標移動到商品圖片上時,圖片上會出現(xiàn)一個矩形區(qū)域,而這個區(qū)域就是你要放大的區(qū)域,然后商品圖片的右側(cè)會出現(xiàn)一個放大后的商品圖片。這種放大方式只需要你計算好放大的比例,然后通過修改放大區(qū)域的scrollLeft和scrollTop值實現(xiàn)相應(yīng)的放大效果。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>圖片放大器</title>
<style media="screen">
*{
margin: 0;
padding: 0;
}
/*可視區(qū)域的父級標簽*/
.wrap{
width: 400px;
height:auto;
border: 1px solid black;
display: inline-block;
position: absolute;
left: 0;
top: 0;
}
.wrap>img{
width: 100%;
height: auto;
}
/*鎖定放大的矩形區(qū)域*/
.box{
border: 1px solid black;
width: 100px;
height: 100px;
background: rgba(0, 0, 0, 0.5);
opacity: 0.8;
position: absolute;
cursor: pointer;
display: none;
}
/*要顯示放大圖片的父級*/
.main{
width: 700px;
height: 700px;
margin-left: 420px;
overflow:hidden;
display:none;
position: absolute;
top: 0;
}
.main>img{
width:2800px;
height:auto;
}
</style>
</head>
<body>
<div class="wrap">
<img src="dog.jpg" alt="" />
<div class="box"></div>
</div>
<div class="main">
<img src="dog.jpg"alt="" />
</div>
<script type="text/javascript">
//獲取四個對象
var wrap=document.querySelector('.wrap');
var box=document.querySelector('.box');
var main=document.querySelector('.main');
var mainImg=document.querySelector('.main img');
//添加移動事件
wrap.onmousemove=function(){
//鼠標移入可視圖片后出現(xiàn) 鎖定放大區(qū)域及放大圖片
box.style.display='block';
main.style.display='block';
var event=window.event || event;
//獲取鼠標距離可視區(qū)域邊緣的偏移量
var disx=event.clientX-box.offsetWidth/2;
var disy=event.clientY-box.offsetHeight/2;
//矩形區(qū)域的最大可移動范圍
var distanceMaxX=wrap.offsetWidth-box.offsetWidth;
var distanceMaxY=wrap.offsetHeight-box.offsetHeight;
// 判斷讓鎖定放大的矩形區(qū)域不能出框
if (disx<=0) {
disx=0;
}
if (disy<=0) {
disy=0;
}
if(disx>=distanceMaxX) {
disx=distanceMaxX;
}
if(disy>=distanceMaxY) {
disy=distanceMaxY;
}
box.style.left=disx+'px';
box.style.top=disy+'px';

//獲取放大比例
var scalex=box.offsetLeft/distanceMaxX;
var scaley=box.offsetTop/distanceMaxY;
main.scrollLeft=(mainImg.clientWidth-main.clientWidth)*scalex;
main.scrollTop=(mainImg.clientHeight-main.clientHeight)*scaley;
}

//添加移出事件
wrap.onmouseout=function(){
box.style.display='none';
main.style.display='none';
}
</script>
</body>
</html>

效果預(yù)覽:

這里寫圖片描述

第二種是直接在原圖上放大,像放大鏡在上面一樣,這是在第一種上的一個擴展,前面的方法沒有什么區(qū)別,只是最后不需要給它放置一個可視區(qū)域,直接在你原來所定放大的區(qū)域上顯示放大圖片,當你修改放大區(qū)域的left和top值時同時自動修改圖片相應(yīng)的left和top值,實現(xiàn)同步放大效果

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>放大鏡</title>
<style type="text/css">
.main{
width: 500px;
height: 570px;
border: 2px solid black;
position: relative;
/*overflow: hidden;*/
}
#img1{
width: 100%;
height: 100%;
}
.box{
width: 200px;
height: 200px;
border-radius: 200px;
/*border: 1px solid black;*/
display: none;
position: absolute;
overflow: hidden;
cursor:move;
}
//放大圖片 給絕對定位讓移動時它也能跟著移動
實現(xiàn)和我們鎖定的區(qū)域同步
#img2{
width: 1200px;
height: 1400px;
position: absolute;
/*left: 0;
top: 0;*/
/*display: none;*/
}
</style>
</head>
<body>
<div class="main">
<img id="img1" src="dog.jpg"/>
<div class="box">
<img id="img2" src="dog.jpg"/>
</div>
</div>
</body>
</html>
<script type="text/javascript">
var main=document.querySelector('.main');
var box=document.querySelector('.box');
var boximg=document.querySelector('#img2');
//添加鼠標移動事件
main.addEventListener('mousemove',move,false);
function move(){
//顯示放大的圓形區(qū)域
box.style.display='block';
var event=window.event||event;
//獲取鼠標距離可視區(qū)域邊緣的偏移量
var disx=event.clientX-box.offsetWidth/2;
var disy=event.clientY-box.offsetHeight/2;
var dismax=main.offsetWidth-box.offsetWidth;
var dismay=main.offsetHeight-box.offsetHeight;
//矩形區(qū)域的最大可移動范圍
if (disx<=0) {
disx=0;
}
if (disx>=dismax) {
disx=dismax-2;
}
if(disy<=0){
disy=0;
}
if(disy>=dismay){
disy=dismay-2;
}
//當你移動的時候修改圓形區(qū)域的left以及 top值。
box.style.left=disx+'px';
box.style.top=disy+'px';
// var scalx=main.offsetWidth/box.offsetWidth
// var scaly=main.offsetHeight/box.offsetHeight;
//同理當你移動時放大的圖片它的圖片也要修改left和top值
boximg.style.left=-event.clientX*2+'px';
boximg.style.top=-event.clientY*2+'px';
// box.scrollLeft=(boximg.offsetWidth-box.offsetWidth);
// box.scrollTop=(boximg.offsetHeight-box.offsetHeight);
}
// 添加鼠標移出事件
main.addEventListener('mouseout',out,false);
function out(){
box.style.display='none';
}
</script>

效果預(yù)覽:

這里寫圖片描述

結(jié)語:大家也看到了,其實兩種放大方式其實沒有什么區(qū)別,首先你要獲取要放大的區(qū)域也就是剛才說的鎖定放大區(qū)域的矩形和圓形。然后把要放大的圖片給定一個區(qū)域顯示。希望這兩段代碼對大家有所幫助,謝謝?。?!

相關(guān)文章

  • JS造成內(nèi)存泄漏的幾種情況實例分析

    JS造成內(nèi)存泄漏的幾種情況實例分析

    這篇文章主要介紹了JS造成內(nèi)存泄漏的幾種情況,結(jié)合實例形式分析了內(nèi)存泄漏的原理以及JS造成內(nèi)存泄漏的幾種常見情況,需要的朋友可以參考下
    2020-03-03
  • 關(guān)于ES6中的箭頭函數(shù)超詳細梳理

    關(guān)于ES6中的箭頭函數(shù)超詳細梳理

    箭頭函數(shù)可以說是es6的一大亮點,使用箭頭函數(shù),可以簡化編碼過程,是代碼更加的簡潔,下面這篇文章主要給大家介紹了關(guān)于ES6中箭頭函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Swiper.js實現(xiàn)移動端元素左右滑動

    Swiper.js實現(xiàn)移動端元素左右滑動

    這篇文章主要為大家詳細介紹了Swiper.js實現(xiàn)移動端元素左右滑動 ,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • JavaScript繼承的實現(xiàn)方式詳解

    JavaScript繼承的實現(xiàn)方式詳解

    JavaScript 是一門基于原型的語言,它的繼承機制與傳統(tǒng)的基于類的面向?qū)ο缶幊逃兴煌?盡管 ES6 引入了 class 語法,但本質(zhì)上仍然是基于原型鏈的繼承,本文將詳細介紹 JavaScript 繼承的幾種實現(xiàn)方式,需要的朋友可以參考下
    2025-03-03
  • JavaScript Eval 函數(shù)使用

    JavaScript Eval 函數(shù)使用

    JavaScript Eval 函數(shù)使用,需要的朋友可以參考下。
    2010-03-03
  • 微信小程序通過uni-app進行全局分享

    微信小程序通過uni-app進行全局分享

    這篇文章主要介紹了微信小程序通過uni-app進行全局分享,小編覺得挺不錯的,現(xiàn)在分享給大家,需要的朋友可以收藏下
    2021-11-11
  • JavaScript中this綁定規(guī)則你理解了嗎

    JavaScript中this綁定規(guī)則你理解了嗎

    JavaScript中的this是一個非常重要的概念,也是一個令新手開發(fā)者甚至有些不深入理解的多年經(jīng)驗開發(fā)者都會感到困惑的概念,如果你希望自己能夠使用this編寫更好的代碼或者更好理解他人的代碼,就跟隨小編一起理解一下this吧
    2023-07-07
  • JavaScript判斷兩個對象是否相等的方法總結(jié)

    JavaScript判斷兩個對象是否相等的方法總結(jié)

    判斷兩個對象是否相等是js中的一個很常見的內(nèi)容,不同的編程語言和環(huán)境可能會有不同的方式來實現(xiàn)這一目標,在 JavaScript 中,判斷兩個對象是否相等主要有以下幾種方法,感興趣的小伙伴跟著小編一起來看看吧
    2024-08-08
  • 利用原生JS自動生成文章標題樹的實例

    利用原生JS自動生成文章標題樹的實例

    網(wǎng)上關(guān)于生成文章標題樹的示例很多,這篇文章介紹的是利用原生JS實現(xiàn)自動生成文章標題樹,實現(xiàn)過程很簡單,有需要的可以參考借鑒。
    2016-08-08
  • javascript 用局部變量來代替全局變量

    javascript 用局部變量來代替全局變量

    在JavaScript中,我們應(yīng)該盡可能的用局部變量來代替全局變量,這句話所有人都知道,可是這句話是誰先說的?
    2009-05-05

最新評論

乌拉特前旗| 老河口市| 化德县| 炉霍县| 吉首市| 永嘉县| 西乌| 拉萨市| 寻乌县| 息烽县| 响水县| 东丰县| 安平县| 北川| 沙洋县| 从江县| 宜宾县| 大宁县| 澎湖县| 黑水县| 文山县| 綦江县| 田东县| 铜陵市| 罗甸县| 二连浩特市| 云南省| 来安县| 柯坪县| 宁陵县| 会泽县| 宝兴县| 托里县| 菏泽市| 宁陕县| 新安县| 西昌市| 玉门市| 牡丹江市| 资源县| 临漳县|