ユーザーがダブルタップではなく、スライドの上にマウスを置いたときにズーム機能を実行することは可能ですか?ダブルタップ方式はタッチには最適ですが、デスクトップの場合はそれほど直感的ではなく、他のインタラクティブな要素(リンクなど)で大混乱を引き起こします
マウスオーバーによるズームを使用すると、ユーザーは、スライドの中心に対するマウスの位置に関連して、ズームされたスライド画像をナビゲートできるようになります。マウスを右上に移動すると、ズームコンテナ内の他のコーナーまたは領域にマウスを移動するのと同じように、スライド画像がパンして右上の領域にズームします。
ズームで反転パンも有効にするスイッチがあった場合も便利です(たとえば、カーソルを左上に移動すると、画像の右下にパンしてズームします)。
Swiper
jsライブラリを使用して画像をズームインおよびズームアウトします。
HTML
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">
<div class="swiper-zoom-container">
<img src="https://s3.amazonaws.com/uifaces/faces/Twitter/zakiwarfel/128.jpg" class="media-object img-circle thumbnail">
</div>
</div>
<div class="swiper-slide">
<div class="swiper-zoom-container">
<img src="https://s3.amazonaws.com/uifaces/faces/Twitter/adhamdannaway/128.jpg" class="media-object img-circle thumbnail">
</div>
</div>
<div class="swiper-slide">Plain slide with text</div>
<div class="swiper-slide">
<!-- Override maxRatio parameter -->
<div class="swiper-zoom-container" data-swiper-zoom="5">
<img src="path/to/image1.jpg">
</div>
</div>
</div>
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
JS
var mySwiper = new Swiper('.swiper-container', {
zoom: {
maxRatio: 5,
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
}
});
var swiperSlide = document.getElementsByClassName('swiper-slide')
for(var index = 0; index< swiperSlide.length; index++){
swiperSlide[index].addEventListener('mouseover',function(e){
mySwiper.zoom.in();
})
swiperSlide[index].addEventListener('mouseout',function(e){
mySwiper.zoom.out();
})
}
マウスオーバーイベントで次のメソッドを呼び出すことができます。
mySwiper.zoom.in
ここで、mySwiperはSwiperクラスのインスタンスです。 link の後に情報を取得できます。これが例です。
window.Myswiper = new Swiper('.swiper-container', {
zoom: true,
pagination: {
el: '.swiper-pagination',
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
});
var img1 = document.getElementById("img1");
var img2 = document.getElementById("img2");
img1.addEventListener("mousemove", function() {
if(Myswiper.zoom.scale < 2)
Myswiper.zoom.in()
})
img1.addEventListener("mouseout", function() {
Myswiper.zoom.out()
})
img2.addEventListener("mousemove", function() {
if(Myswiper.zoom.scale < 2)
Myswiper.zoom.in()
})
img2.addEventListener("mouseout", function() {
Myswiper.zoom.out()
})
html,
body {
position: relative;
height: 100%;
}
body {
background: #000;
font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
font-size: 14px;
color: #000;
margin: 0;
padding: 0;
}
.swiper-container {
width: 100%;
height: 100%;
}
.swiper-slide {
overflow: hidden;
}
<link href="https://idangero.us/swiper/dist/css/swiper.min.css" rel="stylesheet" />
<script src="https://idangero.us/swiper/dist/js/swiper.min.js"></script>
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">
<div class="swiper-zoom-container">
<img id="img1" src="http://www.clker.com/cliparts/3/m/v/Y/E/V/small-red-Apple-hi.png">
</div>
</div>
<div class="swiper-slide">
<div class="swiper-zoom-container">
<img id="img2" src="http://www.clker.com/cliparts/3/k/L/m/P/2/yellow-Apple-md.png">
</div>
</div>
</div>
<!-- Add Pagination -->
<div class="swiper-pagination swiper-pagination-white"></div>
<!-- Add Navigation -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
react-id-swiperを使用していて、Swiper垂直サムネイルも使用している場合
これがコード例です。
componentWillUpdate(nextProps, nextState) {
if (nextState.gallerySwiper && nextState.thumbnailSwiper) {
const { gallerySwiper, thumbnailSwiper } = nextState
gallerySwiper.controller.control = thumbnailSwiper;
thumbnailSwiper.controller.control = gallerySwiper;
var swiperSlide = document.getElementsByClassName('swiper-zoom-container')
for(var index = 0; index<swiperSlide.length; index++){
swiperSlide[index].addEventListener('mouseover',function(e){
gallerySwiper.zoom.in();
})
swiperSlide[index].addEventListener('mouseout',function(e){
gallerySwiper.zoom.out();
})
}
}
}