js实现移动端图片预览:手势缩放, 手势拖动,双击放大...
时间: 2023-07-18 13:20:02 浏览: 213
实现移动端图片预览,可以使用一些现成的库,例如PhotoSwipe、viewer.js等,也可以自己实现。
以下是一个简单的实现步骤:
1. 首先,需要监听图片的点击事件,当图片被点击时,显示预览框,并在预览框中显示图片。
2. 接下来,需要实现手势缩放和手势拖动。可以借助Hammer.js等手势库来实现,当用户在图片上进行缩放或拖动时,修改图片的样式,实现缩放和拖动效果。
3. 双击放大功能可以通过监听双击事件来实现,当用户双击图片时,将图片放大到一定的比例。
4. 最后,需要注意一些细节问题,例如在缩放时限制最大最小缩放比例,避免图片过小或过大,同时在预览框中显示图片时,需要对图片进行居中处理,以保证用户体验。
下面是一个简单的示例代码:
```html
<!-- HTML部分 -->
<div class="preview-container">
<img src="your-image-url" class="preview-image">
</div>
```
```css
/* CSS部分 */
.preview-container {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.8);
display: none;
justify-content: center;
align-items: center;
}
.preview-image {
max-width: 100%;
max-height: 100%;
}
```
```javascript
// JavaScript部分
var previewContainer = document.querySelector('.preview-container');
var previewImage = document.querySelector('.preview-image');
// 监听图片点击事件
previewImage.addEventListener('click', function() {
previewContainer.style.display = 'flex';
});
// 初始化手势库
var mc = new Hammer.Manager(previewImage);
mc.add(new Hammer.Pinch());
mc.add(new Hammer.Pan({ threshold: 0 }));
var scale = 1, lastScale = 1;
var posX = 0, posY = 0, lastPosX = 0, lastPosY = 0;
// 监听手势事件
mc.on('pinchstart', function(e) {
lastScale = scale;
});
mc.on('pinchmove', function(e) {
scale = Math.max(1, Math.min(lastScale * e.scale, 3));
previewImage.style.transform = 'scale(' + scale + ') translate(' + posX + 'px,' + posY + 'px)';
});
mc.on('pinchend', function(e) {
lastScale = scale;
});
mc.on('panstart', function(e) {
lastPosX = posX;
lastPosY = posY;
});
mc.on('panmove', function(e) {
posX = lastPosX + e.deltaX;
posY = lastPosY + e.deltaY;
previewImage.style.transform = 'scale(' + scale + ') translate(' + posX + 'px,' + posY + 'px)';
});
// 监听双击事件
previewImage.addEventListener('dblclick', function() {
if (scale === 1) {
scale = 2;
previewImage.style.transform = 'scale(' + scale + ') translate(' + posX + 'px,' + posY + 'px)';
} else {
scale = 1;
posX = 0;
posY = 0;
previewImage.style.transform = 'scale(' + scale + ') translate(' + posX + 'px,' + posY + 'px)';
}
});
// 点击预览框关闭预览
previewContainer.addEventListener('click', function() {
previewContainer.style.display = 'none';
scale = 1;
posX = 0;
posY = 0;
previewImage.style.transform = 'scale(' + scale + ') translate(' + posX + 'px,' + posY + 'px)';
});
```
阅读全文