禁止手机/平板整页捏合缩放;帖子与单页正文直接显示原图(含外链可点开灯箱),灯箱内支持双指缩放与拖动。 Co-authored-by: Cursor <cursoragent@cursor.com>
65 lines
3.1 KiB
HTML
65 lines
3.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
|
<meta name="description" content="拾三一隅,自在交流" />
|
|
<title>姜十三论坛 - 拾三一隅,自在交流</title>
|
|
<style>
|
|
/* 关键布局样式:在 JS/CSS 包加载前即固定三栏结构,避免刷新时组件错位 */
|
|
html { scrollbar-gutter: stable; }
|
|
html, body, #root { height: 100%; margin: 0; touch-action: pan-x pan-y; }
|
|
body { overflow: hidden; font-size: 14px; line-height: 1.5; }
|
|
.app-shell { height: 100%; max-height: 100dvh; display: flex; flex-direction: column; overflow: hidden; touch-action: pan-x pan-y; }
|
|
.app-frame { flex: 1; min-height: 0; height: 100%; max-width: 1400px; width: 100%; margin: 0 auto; display: flex; flex-direction: column; overflow: hidden; touch-action: pan-x pan-y; }
|
|
.app-header { height: 56px; flex-shrink: 0; }
|
|
.site-footer { flex-shrink: 0; }
|
|
.app-body { flex: 1; display: flex; min-height: 0; width: 100%; overflow: hidden; touch-action: pan-x pan-y; }
|
|
.content-workspace { flex: 1; display: flex; min-width: 0; min-height: 0; overflow: hidden; touch-action: pan-x pan-y; }
|
|
.sidebar { width: 210px; flex-shrink: 0; }
|
|
.main-content { flex: 1; min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; touch-action: pan-x pan-y; }
|
|
.aside-panel { width: 280px; flex-shrink: 0; }
|
|
@media (max-width: 1100px) { .aside-panel { display: none; } }
|
|
@media (max-width: 768px) { .sidebar { display: none; } }
|
|
</style>
|
|
<script>
|
|
(function () {
|
|
var theme = localStorage.getItem('j13-theme') || 'light';
|
|
document.documentElement.classList.toggle('dark', theme === 'dark');
|
|
document.documentElement.style.colorScheme = theme;
|
|
})();
|
|
</script>
|
|
<script>
|
|
/* 锁死手机/平板双指与手势缩放;头像裁剪 / 图片灯箱放行 pinch */
|
|
(function () {
|
|
function inZoomAllowArea(target) {
|
|
return !!(
|
|
target &&
|
|
target.closest &&
|
|
target.closest('.avatar-crop-stage, .image-lightbox')
|
|
);
|
|
}
|
|
function blockGesture(e) {
|
|
if (inZoomAllowArea(e.target)) return;
|
|
if (e.cancelable) e.preventDefault();
|
|
}
|
|
function blockMultiTouch(e) {
|
|
if (e.touches && e.touches.length > 1) {
|
|
if (inZoomAllowArea(e.target)) return;
|
|
if (e.cancelable) e.preventDefault();
|
|
}
|
|
}
|
|
document.addEventListener('gesturestart', blockGesture, { passive: false });
|
|
document.addEventListener('gesturechange', blockGesture, { passive: false });
|
|
document.addEventListener('gestureend', blockGesture, { passive: false });
|
|
document.addEventListener('touchstart', blockMultiTouch, { passive: false });
|
|
document.addEventListener('touchmove', blockMultiTouch, { passive: false });
|
|
})();
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div id="root"></div>
|
|
<script type="module" src="/src/main.tsx"></script>
|
|
</body>
|
|
</html>
|