Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
pic-reader
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
龙菲
pic-reader
Commits
13c6cf7b
提交
13c6cf7b
authored
6月 25, 2025
作者:
搞事情
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1、完善任意翻页
上级
6f4d84a5
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
40 行增加
和
28 行删除
+40
-28
turn.js
src/assets/js/turn.js
+39
-27
index.vue
src/components/BookReader/index.vue
+1
-1
没有找到文件。
src/assets/js/turn.js
浏览文件 @
13c6cf7b
...
...
@@ -423,6 +423,7 @@
css
({
width
:
(
single
)
?
this
.
width
()
:
this
.
width
()
/
2
,
height
:
this
.
height
()
}).
flip
({
page
:
page
,
display
:
data
.
opts
.
display
,
next
:
(
single
&&
page
===
data
.
totalPages
)
?
page
-
1
:
((
even
||
single
)
?
page
+
1
:
page
-
1
),
turn
:
this
,
duration
:
data
.
opts
.
duration
,
...
...
@@ -1251,6 +1252,11 @@
var
data
=
this
.
data
().
f
;
// 检查数据是否已初始化
if
(
!
data
||
!
data
.
opts
)
{
return
false
;
}
// 检查是否启用非corner翻页
if
(
!
data
.
opts
.
enableNonCorner
)
{
return
false
;
...
...
@@ -1280,51 +1286,35 @@
return
virtualCorner
;
},
// 改进的虚拟corner计算逻辑
// 改进的虚拟corner计算逻辑
- 实现新的翻页逻辑
_calculateVirtualCorner
:
function
(
point
,
allowedCorners
,
turnData
)
{
var
width
=
this
.
width
(),
height
=
this
.
height
(),
data
=
this
.
data
().
f
,
virtualCorner
=
null
;
// 双页模式
的改进
逻辑
// 双页模式逻辑
if
(
turnData
&&
turnData
.
display
===
'double'
)
{
// 获取当前页面在双页视图中的位置
var
currentView
=
turnData
.
view
||
[
data
.
opts
.
page
];
var
isLeftPage
=
data
.
opts
.
page
%
2
===
0
;
// 改进的双页拖动检测:支持跨页拖动,扩大拖动区域到50%
var
dragThreshold
=
width
*
0.5
;
// 50%的区域作为拖动触发区
if
(
isLeftPage
)
{
// 左页:右侧50%区域可以向右翻页,左侧50%区域可以向左翻页
if
(
point
.
x
>
width
-
dragThreshold
)
{
// 右侧拖动区域,向右翻页
virtualCorner
=
(
point
.
y
<
height
/
2
)
?
'tr'
:
'br'
;
}
else
if
(
point
.
x
<
dragThreshold
)
{
// 左侧拖动区域,向左翻页
virtualCorner
=
(
point
.
y
<
height
/
2
)
?
'tl'
:
'bl'
;
}
// 左页:只能向右滑动
virtualCorner
=
(
point
.
y
<
height
/
2
)
?
'tr'
:
'br'
;
}
else
{
// 右页:左侧50%区域可以向左翻页,右侧50%区域可以向右翻页
if
(
point
.
x
<
dragThreshold
)
{
// 左侧拖动区域,向左翻页
virtualCorner
=
(
point
.
y
<
height
/
2
)
?
'tl'
:
'bl'
;
}
else
if
(
point
.
x
>
width
-
dragThreshold
)
{
// 右侧拖动区域,向右翻页
virtualCorner
=
(
point
.
y
<
height
/
2
)
?
'tr'
:
'br'
;
}
// 右页:只能向左滑动
virtualCorner
=
(
point
.
y
<
height
/
2
)
?
'tl'
:
'bl'
;
}
}
else
{
// 单页模式:
整个页面都可以拖动,根据点击位置智能选择方向
// 单页模式:
左半区只能左滑,右半区只能右滑
var
centerX
=
width
/
2
;
var
centerY
=
height
/
2
;
if
(
point
.
x
<
centerX
)
{
// 左
侧点击,
向左翻页
// 左
半区:只能
向左翻页
virtualCorner
=
(
point
.
y
<
centerY
)
?
'tl'
:
'bl'
;
}
else
{
// 右
侧点击,
向右翻页
// 右
半区:只能
向右翻页
virtualCorner
=
(
point
.
y
<
centerY
)
?
'tr'
:
'br'
;
}
}
...
...
@@ -1339,7 +1329,11 @@
isVirtual
:
true
,
// 添加拖动起始信息,用于改进拖动体验
dragStartX
:
point
.
x
,
dragStartY
:
point
.
y
dragStartY
:
point
.
y
,
// 添加区域信息,用于判断是否应该显示折叠页动画
dragArea
:
turnData
&&
turnData
.
display
===
'double'
?
(
data
.
opts
.
page
%
2
===
0
?
'leftPage'
:
'rightPage'
)
:
(
point
.
x
<
width
/
2
?
'leftHalf'
:
'rightHalf'
)
};
}
...
...
@@ -1738,6 +1732,7 @@
_moveFoldingPage
:
function
(
bool
)
{
console
.
log
(
'_moveFoldingPage'
,
bool
);
var
data
=
this
.
data
().
f
,
folding
=
flipMethods
.
_foldingPage
.
call
(
this
);
...
...
@@ -1758,6 +1753,7 @@
_showFoldedPage
:
function
(
c
,
animate
)
{
console
.
log
(
'_showFoldedPage'
,
c
);
var
folding
=
flipMethods
.
_foldingPage
.
call
(
this
),
dd
=
this
.
data
(),
data
=
dd
.
f
;
...
...
@@ -1952,12 +1948,28 @@
// 最小拖动距离阈值
var
minDragDistance
=
data
.
opts
.
minDragDistance
||
30
;
if
(
dragDistance
<
minDragDistance
)
{
// 拖动距离太小,不执行翻页效果
return
;
}
// todo解决单页翻页的问题
// else {
// // 单页特殊处理
// if (data.opts.display === 'single') {
// // 判断滑动方向,判断在左右半区,同向滑动直接翻页不播放翻页特效。
// if (currentMouseX - data.corner.dragStartX > 0) {
// // 向右滑动
// turnMethods.next();
// } else {
// // 向左滑动
// turnMethods.previous();
// }
// }
// return;
// }
// 根据拖动轨迹计算真实的折叠点
var
foldPoint
=
flipMethods
.
_calculateNonCornerFoldPoint
.
call
(
this
,
data
.
corner
.
corner
,
currentMouseX
-
data
.
corner
.
dragStartX
,
currentMouseY
-
data
.
corner
.
dragStartY
,
...
...
src/components/BookReader/index.vue
浏览文件 @
13c6cf7b
...
...
@@ -398,7 +398,7 @@ const initBook = async () => {
// 启用非corner区域翻页
enableNonCorner
:
true
,
// 最大折叠距离比例 (0.1 - 1.0)
maxFoldingDistance
:
0.6
,
maxFoldingDistance
:
2
,
// 最小拖拽距离触发翻页
minDragDistance
:
30
,
gradients
:
true
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论