diff --git a/src/BootstrapBlazor.Server/Components/Samples/ImageViewers.razor b/src/BootstrapBlazor.Server/Components/Samples/ImageViewers.razor
index 83c2dd16e31..9fc3289c4a5 100644
--- a/src/BootstrapBlazor.Server/Components/Samples/ImageViewers.razor
+++ b/src/BootstrapBlazor.Server/Components/Samples/ImageViewers.razor
@@ -116,7 +116,7 @@
Name="PreviewList">
diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json
index 52240212062..872ce12f3b0 100644
--- a/src/BootstrapBlazor.Server/Locales/en-US.json
+++ b/src/BootstrapBlazor.Server/Locales/en-US.json
@@ -5914,7 +5914,7 @@
"ImageViewerErrorTemplateTitle": "Load failed",
"ImageViewerErrorTemplateIntro": "Can be set up by the Error Template open Error Template function, Url parameter Url unable to load images displayed when the content of the Template",
"ImageViewerPreviewListTitle": "A larger preview",
- "ImageViewerPreviewListIntro": "Can be set up by the Preview List opens a larger Preview of the function",
+ "ImageViewerPreviewListIntro": "Can be set up by the Preview List opens a larger Preview of the function, set ZoomSpeed to control the speed of scrolling and scaling",
"ImageViewersAttrUrl": "Picture Url",
"ImageViewersAttrAlt": "Native Alt attribute",
"ImageViewersAttrShowPlaceHolder": "Whether display placeholder for large images added",
diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json
index 12e9dad5b55..a7742e06cc4 100644
--- a/src/BootstrapBlazor.Server/Locales/zh-CN.json
+++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json
@@ -5914,7 +5914,7 @@
"ImageViewerErrorTemplateTitle": "加载失败",
"ImageViewerErrorTemplateIntro": "可通过设置 ErrorTemplate 开启错误模板功能,参数 Url 无法加载图片时显示此模板内容",
"ImageViewerPreviewListTitle": "大图预览",
- "ImageViewerPreviewListIntro": "可通过设置 PreviewList 开启预览大图的功能",
+ "ImageViewerPreviewListIntro": "可通过设置 PreviewList 开启预览大图的功能,设置 ZoomSpeed 控制滚动缩放时的速度",
"ImageViewersAttrUrl": "图片 Url",
"ImageViewersAttrAlt": "原生 alt 属性",
"ImageViewersAttrShowPlaceHolder": "是否显示占位符 适用于大图片加载",
diff --git a/src/BootstrapBlazor/Components/ImagePreviewer/ImagePreviewer.razor.cs b/src/BootstrapBlazor/Components/ImagePreviewer/ImagePreviewer.razor.cs
index e206590c487..88449f733b4 100644
--- a/src/BootstrapBlazor/Components/ImagePreviewer/ImagePreviewer.razor.cs
+++ b/src/BootstrapBlazor/Components/ImagePreviewer/ImagePreviewer.razor.cs
@@ -78,6 +78,12 @@ public partial class ImagePreviewer
[Parameter]
public string? RotateRightIcon { get; set; }
+ ///
+ /// 获得/设置 预览缩放速度 默认 null 未设置取 0.015 值
+ ///
+ [Parameter]
+ public double? ZoomSpeed { get; set; }
+
[Inject]
[NotNull]
private IIconTheme? IconTheme { get; set; }
@@ -126,5 +132,5 @@ protected override async Task OnAfterRenderAsync(bool firstRender)
///
///
///
- protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, PreviewList);
+ protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, PreviewList, new { ZoomSpeed });
}
diff --git a/src/BootstrapBlazor/Components/ImagePreviewer/ImagePreviewer.razor.js b/src/BootstrapBlazor/Components/ImagePreviewer/ImagePreviewer.razor.js
index 47db46efbd7..8885fe574c3 100644
--- a/src/BootstrapBlazor/Components/ImagePreviewer/ImagePreviewer.razor.js
+++ b/src/BootstrapBlazor/Components/ImagePreviewer/ImagePreviewer.razor.js
@@ -1,7 +1,7 @@
import Data from "../../modules/data.js"
import Viewer from "../../modules/viewer.js"
-export function init(id, prevList) {
+export function init(id, prevList, config) {
const el = document.getElementById(id)
if (el === null) {
return
@@ -9,7 +9,7 @@ export function init(id, prevList) {
const viewer = {
el,
- viewer: Viewer.init(el, prevList)
+ viewer: Viewer.init(el, prevList, config)
}
Data.set(id, viewer)
}
diff --git a/src/BootstrapBlazor/Components/ImageViewer/ImageViewer.razor b/src/BootstrapBlazor/Components/ImageViewer/ImageViewer.razor
index c15f7ce24c0..f4b59419090 100644
--- a/src/BootstrapBlazor/Components/ImageViewer/ImageViewer.razor
+++ b/src/BootstrapBlazor/Components/ImageViewer/ImageViewer.razor
@@ -14,7 +14,7 @@
@if (ShowPreviewList)
{
-
+
}
diff --git a/src/BootstrapBlazor/Components/ImageViewer/ImageViewer.razor.cs b/src/BootstrapBlazor/Components/ImageViewer/ImageViewer.razor.cs
index b57753cd4c2..0151b1c070a 100644
--- a/src/BootstrapBlazor/Components/ImageViewer/ImageViewer.razor.cs
+++ b/src/BootstrapBlazor/Components/ImageViewer/ImageViewer.razor.cs
@@ -28,9 +28,7 @@ public partial class ImageViewer
///
[Parameter]
[NotNull]
-#if NET6_0_OR_GREATER
[EditorRequired]
-#endif
public string? Url { get; set; }
///
@@ -118,6 +116,12 @@ public partial class ImageViewer
[Parameter]
public bool IsIntersectionObserver { get; set; }
+ ///
+ /// 获得/设置 预览缩放速度 默认 null 未设置取 0.015 值
+ ///
+ [Parameter]
+ public double? ZoomSpeed { get; set; }
+
[Inject]
[NotNull]
private IIconTheme? IconTheme { get; set; }
diff --git a/src/BootstrapBlazor/wwwroot/modules/viewer.js b/src/BootstrapBlazor/wwwroot/modules/viewer.js
index 591c51ef20e..1ed481cf4f8 100644
--- a/src/BootstrapBlazor/wwwroot/modules/viewer.js
+++ b/src/BootstrapBlazor/wwwroot/modules/viewer.js
@@ -3,6 +3,13 @@ import EventHandler from "./event-handler.js"
export default {
init(el, prevList, config) {
+ const BASE_SPEED = 0.015;
+ if (config.zoomSpeed && typeof config.zoomSpeed !== 'number') {
+ config.zoomSpeed = BASE_SPEED;
+ }
+ if (config.zoomSpeed <= 0) {
+ config.zoomSpeed = BASE_SPEED;
+ }
const viewer = {
...{
el,
@@ -31,7 +38,6 @@ export default {
viewer.pt = { top: 0, left: 0 }
viewer.updateImage(viewer.index)
- // // 消除 body 滚动条
viewer.body.classList.add('is-img-preview')
viewer.el.classList.add('show')
}
@@ -101,15 +107,12 @@ export default {
viewer.prevImg.style.marginTop = `${top}px`
}
- // 关闭按钮处理事件
EventHandler.on(viewer.closeButton, 'click', () => {
viewer.body.classList.remove('is-img-preview')
- // 恢复 Image
viewer.resetImage()
viewer.el.classList.remove('show')
})
- // 上一张按钮处理事件
EventHandler.on(el, 'click', '.bb-viewer-prev', () => {
viewer.index--
if (viewer.index < 0) {
@@ -118,7 +121,6 @@ export default {
viewer.updateImage(viewer.index)
})
- // 下一张按钮处理事件
EventHandler.on(el, 'click', '.bb-viewer-next', () => {
viewer.index++
if (viewer.index >= viewer.prevList.length) {
@@ -127,67 +129,61 @@ export default {
viewer.updateImage(viewer.index)
})
- // 全屏/恢复按钮功能
EventHandler.on(viewer.fullScreen, 'click', () => {
viewer.resetImage()
viewer.el.classList.toggle('active')
})
- // 放大功能
EventHandler.on(viewer.zoomOut, 'click', () => viewer.processImage(scale => scale + 0.2))
-
- // 缩小功能
EventHandler.on(viewer.zoomIn, 'click', () => viewer.processImage(scale => Math.max(0.2, scale - 0.2)))
-
- // 左旋转功能
EventHandler.on(viewer.rotateLeft, 'click', () => viewer.processImage(null, rotate => rotate - 90))
-
- // 右旋转功能
EventHandler.on(viewer.rotateRight, 'click', () => viewer.processImage(null, rotate => rotate + 90))
const handlerWheel = e => {
- e.preventDefault()
- const wheel = e.wheelDelta || -e.detail
- const delta = Math.max(-1, Math.min(1, wheel))
+ e.preventDefault();
+ const wheel = e.wheelDelta || -e.detail;
+ const delta = Math.max(-1, Math.min(1, wheel));
+
+ const zoomStep = e.shiftKey ? viewer.zoomSpeed * 0.2 : viewer.zoomSpeed;
+
if (delta > 0) {
- // 放大
- viewer.processImage(scale => scale + 0.015)
- } else {
- // 缩小
- viewer.processImage(scale => Math.max(0.195, scale - 0.015))
+ viewer.processImage(scale => scale + zoomStep);
+ }
+ else {
+ viewer.processImage(scale => Math.max(0.195, scale - zoomStep));
}
}
- // 鼠标放大缩小
+
EventHandler.on(viewer.prevImg, 'mousewheel', handlerWheel)
EventHandler.on(viewer.prevImg, 'DOMMouseScroll', handlerWheel)
-
- // 点击遮罩关闭功能
EventHandler.on(viewer.mask, 'click', () => {
viewer.closeButton.click()
})
- // 增加键盘支持
- EventHandler.on(document, 'keydown', e => {
+ viewer.keyHandler = e => {
if (e.key === "ArrowUp") {
viewer.zoomOut.click()
- } else if (e.key === "ArrowDown") {
+ }
+ else if (e.key === "ArrowDown") {
viewer.zoomIn.click()
- } else if (e.key === "ArrowLeft") {
+ }
+ else if (e.key === "ArrowLeft") {
const prevButton = viewer.el.querySelector('.bb-viewer-prev')
if (prevButton) {
prevButton.click()
}
- } else if (e.key === "ArrowRight") {
+ }
+ else if (e.key === "ArrowRight") {
const nextButton = viewer.el.querySelector('.bb-viewer-next')
if (nextButton) {
nextButton.click()
}
- } else if (e.key === "Escape") {
+ }
+ else if (e.key === "Escape") {
viewer.closeButton.click()
}
- })
-
- // 缩放处理
+ }
+ EventHandler.on(document, 'keydown', viewer.keyHandler);
EventHandler.on(viewer.prevImg, 'touchstart', e => {
e.preventDefault()
@@ -278,8 +274,6 @@ export default {
e => {
viewer.originX = e.clientX || e.touches[0].clientX
viewer.originY = e.clientY || e.touches[0].clientY
-
- // 偏移量
viewer.pt.top = parseInt(viewer.prevImg.style.marginTop)
viewer.pt.left = parseInt(viewer.prevImg.style.marginLeft)
@@ -309,48 +303,23 @@ export default {
},
dispose(viewer) {
-
- // 关闭按钮处理事件
EventHandler.off(viewer.closeButton, 'click')
-
- // 上一张按钮处理事件
EventHandler.off(viewer.element, 'click', '.bb-viewer-prev')
-
- // 下一张按钮处理事件
EventHandler.off(viewer.element, 'click', '.bb-viewer-next')
-
- // 全屏/恢复按钮功能
EventHandler.off(viewer.fullScreen, 'click')
-
- // 放大功能
EventHandler.off(viewer.zoomOut, 'click')
-
- // 缩小功能
EventHandler.off(viewer.zoomIn, 'click')
-
- // 左旋转功能
EventHandler.off(viewer.rotateLeft, 'click')
-
- // 右旋转功能
EventHandler.off(viewer.rotateRight, 'click')
-
- // 鼠标放大缩小
EventHandler.off(viewer.prevImg, 'mousewheel')
EventHandler.off(viewer.prevImg, 'DOMMouseScroll')
-
- // 触摸放大缩小
EventHandler.off(viewer.prevImg, 'touchstart')
EventHandler.off(viewer.prevImg, 'touchmove')
EventHandler.off(viewer.prevImg, 'touchend')
EventHandler.off(viewer.prevImg, 'touchcancel')
-
- //drag
- Drag.dispose(viewer.prevImg)
-
- // 点击遮罩关闭功能
EventHandler.off(viewer.mask, 'click')
+ EventHandler.off(document, 'keydown', viewer.keyHandler)
- // 增加键盘支持
- EventHandler.off(document, 'keydown')
+ Drag.dispose(viewer.prevImg)
}
}