ToB企服应用市场:ToB评测及商务社交产业平台

标题: 制作一个简单的图片预览 [打印本页]

作者: 滴水恩情    时间: 2024-12-20 19:53
标题: 制作一个简单的图片预览
要实现一个可以举行点击预览、放大缩小和旋转的图片预览功能,你可以使用 HTML、CSS 和 JavaScript 来构建。下面是一个简单的实现示例,包含以下功能:
代码实现

1. HTML结构

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.   <title>图片预览</title>
  7.   <link rel="stylesheet" href="style.css">
  8. </head>
  9. <body>
  10. body>
  11.   <!-- 容器 div,包含缩略图图片 -->
  12.   <div class="container">
  13.     <!-- 缩略图图片(点击后会打开大图预览),使用占位符图片 -->
  14.     <img id="thumbnail" src="https://via.placeholder.com/150" alt="Thumbnail">
  15.   </div>
  16.   <!-- 图片预览模态框,初始时隐藏(通过CSS控制)。用户点击缩略图后显示此部分 -->
  17.   <div id="imagePreview" class="preview-modal">
  18.     <div class="preview-content">
  19.       <!-- 预览大图,初始时显示占位符图片 -->
  20.       <img id="previewImage" src="https://via.placeholder.com/150" alt="Preview Image">
  21.       
  22.       <!-- 控制按钮区,包含放大、缩小、旋转、还原按钮 -->
  23.       <div class="controls">
  24.         <!-- 放大按钮 -->
  25.         <button id="zoomIn">放大</button>
  26.         <!-- 缩小按钮 -->
  27.         <button id="zoomOut">缩小</button>
  28.         <!-- 旋转按钮 -->
  29.         <button id="rotate">旋转</button>
  30.         <!-- 还原按钮,用于重置图片到初始状态 -->
  31.         <button id="reset">还原</button>
  32.       </div>
  33.     </div>
  34.   </div>
  35.   <script src="script.js"></script>
  36. </body>
  37. </html>
复制代码
2. CSS样式

  1. /* 设置页面的基础样式 */
  2. body {
  3.         font-family: Arial, sans-serif;
  4.         margin: 0;
  5.         padding: 0;
  6.         display: flex;
  7.         justify-content: center;
  8.         align-items: center;
  9.         height: 100vh;
  10.         background-color: #f0f0f0;
  11. }
  12. /* 设置图片缩略图容器的样式 */
  13. .container {
  14.         text-align: center;
  15. }
  16. /* 缩略图的样式 */
  17. #thumbnail {
  18.         width: 150px;
  19.         cursor: pointer;
  20.         border: 2px solid #ddd;
  21.         border-radius: 8px;
  22. }
  23. /* 图片预览模态框的样式 */
  24. .preview-modal {
  25.         display: none;
  26.         position: fixed;
  27.         top: 0;
  28.         left: 0;
  29.         width: 100%;
  30.         height: 100%;
  31.         background-color: rgba(0, 0, 0, 0.8);
  32.         justify-content: center;
  33.         align-items: center;
  34. }
  35. /* 预览内容的样式 */
  36. .preview-content {
  37.         position: relative;
  38.         background: #fff;
  39.         padding: 20px;
  40.         border-radius: 8px;
  41.         text-align: center;
  42.         box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
  43. }
  44. /* 预览图片的样式 */
  45. #previewImage {
  46.         max-width: 100%;
  47.         max-height: 80vh;
  48.         transition: transform 0.3s ease;
  49. }
  50. /* 控制按钮容器的样式 */
  51. .controls {
  52.         margin-top: 20px;
  53. }
  54. /* 控制按钮的样式 */
  55. .controls button {
  56.         margin: 0 10px;
  57.         padding: 10px 20px;
  58.         cursor: pointer;
  59.         background-color: #4CAF50;
  60.         color: white;
  61.         border: none;
  62.         border-radius: 4px;
  63.         font-size: 16px;
  64. }
  65. /* 控制按钮的悬停样式 */
  66. .controls button:hover {
  67.         background-color: #45a049;
  68. }
复制代码
3. JavaScript逻辑

  1. // 初始化缩放比例和旋转角度
  2. let scale = 1; // 图片的初始缩放比例为 1(即原始大小)
  3. let rotation = 0; // 图片的初始旋转角度为 0°(即没有旋转)
  4. // 获取页面中的各个 DOM 元素
  5. let thumbnail = document.getElementById('thumbnail'); // 获取缩略图元素
  6. let previewModal = document.getElementById('imagePreview'); // 获取预览框元素
  7. let previewImage = document.getElementById('previewImage'); // 获取预览图像元素
  8. let zoomInButton = document.getElementById('zoomIn'); // 获取放大按钮
  9. let zoomOutButton = document.getElementById('zoomOut'); // 获取缩小按钮
  10. let rotateButton = document.getElementById('rotate'); // 获取旋转按钮
  11. let resetButton = document.getElementById('reset'); // 获取重置按钮
  12. // 点击缩略图时,打开图片预览框
  13. thumbnail.addEventListener('click', () => {
  14.         previewModal.style.display = 'flex';
  15.         previewImage.src = thumbnail.src;
  16. });
  17. // 点击预览框时,如果点击的是预览框背景,关闭预览
  18. previewModal.addEventListener('click', (e) => {
  19.         if (e.target === previewModal) {
  20.                 previewModal.style.display = 'none';
  21.         }
  22. });
  23. // 点击放大按钮时,增加缩放比例
  24. zoomInButton.addEventListener('click', () => {
  25.         scale += 0.1; // 增加缩放比例,每次增加 0.1
  26.         updateTransform(); // 更新图片的缩放和旋转
  27. });
  28. // 点击缩小按钮时,减少缩放比例
  29. zoomOutButton.addEventListener('click', () => {
  30.         scale -= 0.1; // 减少缩放比例,每次减少 0.1
  31.         if (scale < 0.1) scale = 0.1; // 防止缩小比例低于 0.1,确保图片不会过小
  32.         updateTransform(); // 更新图片的缩放和旋转
  33. });
  34. // 点击旋转按钮时,旋转图片 90 度
  35. rotateButton.addEventListener('click', () => {
  36.         rotation += 90; // 每次点击时,旋转角度增加 90°
  37.         updateTransform(); // 更新图片的缩放和旋转
  38. });
  39. // 点击重置按钮时,重置图片的缩放和旋转
  40. resetButton.addEventListener('click', () => {
  41.         scale = 1; // 重置缩放
  42.         rotation = 0; // 重置旋转角度为 0°
  43.         updateTransform(); // 更新图片的缩放和旋转
  44. });
  45. // 更新图片的缩放和旋转效果
  46. function updateTransform() {
  47.         previewImage.style.transform = `scale(${scale}) rotate(${rotation}deg)`;
  48. }
复制代码
代码表明:

测试和扩展:


这个根本实现应该满意简单的图片预览需求。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4