放大器案例

171 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情

前言

之前我们讲解了点名器的案例,今天我们将案例难度稍微升级一下,实现一个放大器的案例,为了提高效率,我们引入jquery进行开发,具体的效果图如下:

55.png

实现

布局

首先我们还是需要把页面布局做出了,根据效果图我们可以分为三部分,左边图片列表,中间原始图片展示,右边放大后的图片,最后用一个wrapper将三部分包裹起来。

  1. 左边图片列表。左边图片列表我们直接用img标签,将每个img设置好大小。
  2. 中间原始图片。中间展示选中的图片即可,最重要的是上面的放大镜,我们需要利用定位结合着鼠标事件做出来。
  3. 右边放大图片。展示放大后的图片,那么我们可以通过将选中区域的宽度跟高度进行放大,利用overflow:hidden将多余的遮住,达到放大的效果。
  4. waraaper。我们可以设置想要的背景颜色,整体大小等属性,让整体看起来更协调。里面的三部分内容利用float浮动进行设置,当然我们也可以使用flex弹性布局进行设置,这里我们任意发挥。
   <style>
     #wrapper{
        width: 1200px;
        height:500px;
        margin: 0 auto;
        padding-top: 40px;
        background: orange;
    }
    .left{
      width: 60px;
      height: 247px;
      float: left;
      margin: 20px 15px;
    }
    .left img{
      width: 60px;
      height: 60px;
    }
    .center{
      width: 500px;
      float: left;
      position: relative;
      height: 305px;
    }
    .glass{
        width: 100px;
        height: 100px;
        position: absolute;
        left: 0;
        top: 0;
        display: none;
        background-color: rgba(0, 0, 0, 0.5);
    }
    .center img{
        width: 480px;
        height: 300px;
    }
    .right{
        width: 500px;
        float: left;
        height: 300px;
        overflow: hidden;
        display: none;
    }
    .right img{
        width: 1440px;
        height: 900px; 
    }
</style>
<body>
    <div id="wrapper">
        <div class="left"> 
            <!-- src是保存图片的路径 -->
            <img src="imgs/01.jpg">
            <img src="imgs/02.jpg">
            <img src="imgs/03.jpg">
            <img src="imgs/04.jpg">
        </div>
        <div class="center">
            <img src="imgs/01.jpg">
            <div class="glass"></div>
        </div>
        <div class="right">
            <img src="imgs/01.jpg">
        </div>
    </div>
    </body>

实现

首先我们引入jquery,这里我们是下载好了jquery.min.js文件,在页面引入jquery文件即可。我们也可以利用cdn的方式进行引入,使用该方法需要保持网络畅通。

<script src="../js/jquery-3.4.1.min.js"></script>//src是文件所在路径

接下来我们就要一步步实现放大镜的功能:

  • 图片切换。我们图片是默认展示左边列表第一个的,当用鼠标点击图片时候会进行切换,我们给左边图片添加点击事件,当点击的时候将中间图片与右边放大图片的src属性换成点击图片的src就能实现点击切换。
    //切换图片 将每个图片添加点击事件
        $(".left img").click(function(){
        //将src进行替换
            $(".center img").attr("src",$(this).attr("src"))
            $(".right img").attr("src",$(this).attr("src"))
        })
  • 放大镜与右边图片出现。中间图片移入时放大镜与放大图片出现,移出时放大镜与放大图片消失,我们通过鼠标移入移除事件,控制display属性就能实现它们出现消失。
    //通过移入移除控制放大镜跟放大图片出现消失
        $(".center").mouseover(function(){
            $(".glass").show()
            $(".right").show()
        })
        $(".center").mouseout(function(){
            $(".glass").hide()
            $(".right").hide()
        })
  • 图片放大。首先我们获取鼠标位置,然后通过设置left,top属性将放大器的中心位置移动到鼠标所在的位置,最后计算放大比例,移动盒子大小,将放大后的图片展示出来。另外我们还要限制放大器位置,不能超过中间图片所在范围。
//放大效果
   $(".center").mousemove(function(e){
           //计算放大器位置
            var x = e.pageX - $(".center").offset().left-$(".glass").width()/2
            var y = e.pageY - $(".center").offset().top-$(".glass").height()/2
            //最小限制
            x<0?(x=0):x
            y<0?(y=0):y
            //最大限制
            x>$(".center").width()-$(".glass").width()?   x=$(".center").width()-$(".glass").width():x
            y>$(".center").height()-$(".glass").height()?y=$(".center").height()-$(".glass").height():y
    
            $(".glass").css({
                left:x+'px',
                top:y+'px'
            })
            //扩大比例
            var bx = $(".right img").width() / $(".center img").width()
            var by = $(".right img").height() / $(".center img").height()
            //实现放大后的图片
            $(".right").scrollLeft(x*bx)
            $(".right").scrollTop(y*by)
        })

总结

以上就是放大器案例,具体的放大器样式我们可以再优化下,让其看起来更像一个放大器。只要掌握了思路,剩下就是自由发挥时间啦。