edit
This commit is contained in:
@@ -101,6 +101,28 @@
|
|||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
/* Прозрачные зоны для тачей поверх всего */
|
||||||
|
#touch-left, #touch-right, #touch-center {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 9000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#touch-left {
|
||||||
|
left: 0;
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#touch-right {
|
||||||
|
right: 0;
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#touch-center {
|
||||||
|
left: 30%;
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -116,7 +138,10 @@
|
|||||||
<span id="error-text"></span>
|
<span id="error-text"></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="debug-log"></div>
|
<!-- Невидимые зоны тачей поверх iframe epub.js -->
|
||||||
|
<div id="touch-left"></div>
|
||||||
|
<div id="touch-center"></div>
|
||||||
|
<div id="touch-right"></div>
|
||||||
<script src="_framework/hybridwebview.js"></script>
|
<script src="_framework/hybridwebview.js"></script>
|
||||||
<script>
|
<script>
|
||||||
// ========== DEBUG LOGGING ==========
|
// ========== DEBUG LOGGING ==========
|
||||||
@@ -154,47 +179,53 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ========== SWIPE DETECTION ==========
|
// ========== TOUCH ZONES ==========
|
||||||
var touchStartX = 0;
|
document.getElementById('touch-left').addEventListener('click', function (e) {
|
||||||
var touchStartY = 0;
|
e.preventDefault();
|
||||||
var touchStartTime = 0;
|
e.stopPropagation();
|
||||||
var SWIPE_THRESHOLD = 50;
|
|
||||||
var SWIPE_TIME_LIMIT = 500;
|
|
||||||
|
|
||||||
document.addEventListener('touchstart', function (e) {
|
|
||||||
touchStartX = e.changedTouches[0].clientX;
|
|
||||||
touchStartY = e.changedTouches[0].clientY;
|
|
||||||
touchStartTime = Date.now();
|
|
||||||
}, { passive: true });
|
|
||||||
|
|
||||||
document.addEventListener('touchend', function (e) {
|
|
||||||
var touchEndX = e.changedTouches[0].clientX;
|
|
||||||
var touchEndY = e.changedTouches[0].clientY;
|
|
||||||
var elapsed = Date.now() - touchStartTime;
|
|
||||||
|
|
||||||
if (elapsed > SWIPE_TIME_LIMIT) return;
|
|
||||||
|
|
||||||
var diffX = touchEndX - touchStartX;
|
|
||||||
var diffY = touchEndY - touchStartY;
|
|
||||||
|
|
||||||
if (Math.abs(diffX) > Math.abs(diffY) && Math.abs(diffX) > SWIPE_THRESHOLD) {
|
|
||||||
if (diffX < 0) {
|
|
||||||
nextPage();
|
|
||||||
} else {
|
|
||||||
prevPage();
|
prevPage();
|
||||||
}
|
});
|
||||||
} else if (Math.abs(diffX) < 15 && Math.abs(diffY) < 15) {
|
|
||||||
var screenWidth = window.innerWidth;
|
document.getElementById('touch-right').addEventListener('click', function (e) {
|
||||||
if (touchStartX > screenWidth * 0.3 && touchStartX < screenWidth * 0.7) {
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
nextPage();
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById('touch-center').addEventListener('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
sendMessage('toggleMenu', {});
|
sendMessage('toggleMenu', {});
|
||||||
} else if (touchStartX <= screenWidth * 0.3) {
|
});
|
||||||
prevPage();
|
|
||||||
} else {
|
|
||||||
nextPage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, { passive: true });
|
|
||||||
|
|
||||||
|
// Свайпы на зонах
|
||||||
|
var swipeStartX = 0, swipeStartY = 0, swipeStartTime = 0;
|
||||||
|
|
||||||
|
function onSwipeStart(e) {
|
||||||
|
var touch = e.touches ? e.touches[0] : e;
|
||||||
|
swipeStartX = touch.clientX;
|
||||||
|
swipeStartY = touch.clientY;
|
||||||
|
swipeStartTime = Date.now();
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSwipeEnd(e) {
|
||||||
|
var touch = e.changedTouches ? e.changedTouches[0] : e;
|
||||||
|
var dx = touch.clientX - swipeStartX;
|
||||||
|
var dy = touch.clientY - swipeStartY;
|
||||||
|
var dt = Date.now() - swipeStartTime;
|
||||||
|
|
||||||
|
if (dt > 500) return;
|
||||||
|
if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 50) {
|
||||||
|
if (dx < 0) nextPage();
|
||||||
|
else prevPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
['touch-left', 'touch-center', 'touch-right'].forEach(function (id) {
|
||||||
|
var el = document.getElementById(id);
|
||||||
|
el.addEventListener('touchstart', onSwipeStart, { passive: true });
|
||||||
|
el.addEventListener('touchend', onSwipeEnd, { passive: true });
|
||||||
|
});
|
||||||
// ========== EPUB READER ==========
|
// ========== EPUB READER ==========
|
||||||
var book = null;
|
var book = null;
|
||||||
var rendition = null;
|
var rendition = null;
|
||||||
@@ -266,7 +297,6 @@
|
|||||||
spread: 'none',
|
spread: 'none',
|
||||||
flow: 'paginated'
|
flow: 'paginated'
|
||||||
});
|
});
|
||||||
|
|
||||||
rendition.themes.default({
|
rendition.themes.default({
|
||||||
'body': {
|
'body': {
|
||||||
'font-family': 'serif !important',
|
'font-family': 'serif !important',
|
||||||
|
|||||||
Reference in New Issue
Block a user