bxslider 에 돋보기 기능 구현
HTML,CSS,JAVASCRIPT

bxslider 에 돋보기 기능 구현

html

 

 

<head>

  <link

    rel="stylesheet"

    href="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.css"

  />

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

  <script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>

</head>

 

<main>

  <div class="slider">

    <div class="img-magnifier-container">

      <img

        class="myimage"

        src="https://picsum.photos/600/400"

        width="600"

        height="400"

      />

    </div>

    <div class="img-magnifier-container">

      <img

        class="myimage"

        src="https://picsum.photos/1200/800"

        width="600"

        height="400"

      />

    </div>

  </div>

</main>

 

라이브러리 버전에 신경써서 작업해야합니다.

 

 

JavaScript

 

 

import './style.css';

 

var glass = document.createElement('DIV');

glass.setAttribute('class''img-magnifier-glass');

glass.style.backgroundRepeat = 'no-repeat';

 

function magnify(imgzoom) {

  var whbw;

  /*insert magnifier glass:*/

  img.parentElement.insertBefore(glassimg);

  /*set background properties for the magnifier glass:*/

  glass.style.backgroundImage = "url('" + img.src + "')";

  glass.style.backgroundSize =

    img.width * zoom + 'px ' + img.height * zoom + 'px';

  bw = 3;

  w = glass.offsetWidth / 2;

  h = glass.offsetHeight / 2;

  /*execute a function when someone moves the magnifier glass over the image:*/

  glass.addEventListener('mousemove'moveMagnifier);

  img.addEventListener('mousemove'moveMagnifier);

  /*and also for touch screens:*/

  glass.addEventListener('touchmove'moveMagnifier);

  img.addEventListener('touchmove'moveMagnifier);

  function moveMagnifier(e) {

    var posxy;

    /*prevent any other actions that may occur when moving over the image*/

    e.preventDefault();

    /*get the cursor's x and y positions:*/

    pos = getCursorPos(e);

    x = pos.x;

    y = pos.y;

    /*prevent the magnifier glass from being positioned outside the image:*/

    if (x > img.width - w / zoom) {

      x = img.width - w / zoom;

    }

    if (x < w / zoom) {

      x = w / zoom;

    }

    if (y > img.height - h / zoom) {

      y = img.height - h / zoom;

    }

    if (y < h / zoom) {

      y = h / zoom;

    }

    /*set the position of the magnifier glass:*/

    glass.style.left = x - w + 'px';

    glass.style.top = y - h + 'px';

    /*display what the magnifier glass "sees":*/

    glass.style.backgroundPosition =

      '-' + (x * zoom - w + bw) + 'px -' + (y * zoom - h + bw) + 'px';

  }

  function getCursorPos(e) {

    var a,

      x = 0,

      y = 0;

    e = e || window.event;

    /*get the x and y positions of the image:*/

    a = img.getBoundingClientRect();

    /*calculate the cursor's x and y coordinates, relative to the image:*/

    x = e.pageX - a.left;

    y = e.pageY - a.top;

    /*consider any page scrolling:*/

    x = x - window.pageXOffset;

    y = y - window.pageYOffset;

    return { x: xy: y };

  }

}

 

$('.slider').bxSlider({

  onSliderLoad: function () {

    magnify(this.getCurrentSlideElement().children('.myimage')[0], 3);

  },

  onSlideBefore: function ($slideElement) {

    magnify($slideElement.children('.myimage')[0], 3);

  },

});

 

 

CSS

 

* {

  box-sizingborder-box;

}

 

.img-magnifier-container {

  positionrelative;

}

 

.img-magnifier-glass {

  positionabsolute;

  border3px solid #000;

  border-radius50%;

  cursornone;

  width100px;

  height100px;

}

 

main {

  width600px;

}