捕魚遊戲專區
FISHING
捕魚遊戲
高節奏與技巧玩法
捕魚遊戲強調反應與砲台配置,適合喜愛節奏刺激的玩家。
FISHING GAME精選捕魚玩法
掌握砲台與節奏技巧
TARGET
高分魚種
掌握高分魚出現時機。
進入遊戲
GUIDES & TIPS捕魚玩法攻略
掌握砲台與節奏技巧
捕魚3分鐘閱讀
電子捕魚技巧教學
電子捕魚技巧教學 本頁提供重點整理與操作指引,方便快速掌握主要資訊。 回到首頁新手與進階玩家都適用的操作指南 […]
捕魚3分鐘閱讀
電子捕魚介紹
電子捕魚遊戲新手懶人包 電子捕魚介紹 本頁提供重點整理與操作指引,方便快速掌握主要資訊。 回到首頁 一篇看懂玩 […]
捕魚玩法節奏快,建議先熟悉砲台倍率與魚群出現規律。
掌握高分魚種出現時機,可提升整體效率。
JOIN US TODAY立即體驗捕魚
加入捕魚玩法,感受爆分節奏
const navItems = Array.from(document.querySelectorAll(".nav-item"));
if (navItems.length) {
navItems.forEach((item) => {
const link = item.querySelector("a");
const dropdown = item.querySelector(".dropdown");
if (!link || !dropdown) return;
link.addEventListener("click", (event) => {
if (!window.matchMedia("(max-width: 900px)").matches) return;
event.preventDefault();
navItems.forEach((other) => {
if (other !== item) other.classList.remove("is-open");
});
item.classList.toggle("is-open");
});
});
}lucide.createIcons();const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
const starCanvases = document.querySelectorAll("[data-starfield]");const initStarfield = (starCanvas) => {
const ctx = starCanvas.getContext("2d");
if (!ctx) return;
let stars = [];
let pointer = { x: null, y: null };
let driftTime = 0;
let isMobile = window.innerWidth {
const rect = starCanvas.getBoundingClientRect();
isMobile = window.innerWidth ({
ox: Math.random() * rect.width,
oy: Math.random() * rect.height,
r: Math.random() * 1.6 + 0.6,
alpha: Math.random() * 0.4 + 0.4,
twinkle: Math.random() * Math.PI * 2,
}));
};const draw = (time = 0) => {
if (isMobile && time - lastFrameTime {
star.twinkle += 0.02;
const flicker = (Math.sin(star.twinkle) + 1) / 2;
let x = star.ox;
let y = star.oy;
const driftX = Math.cos(driftTime + star.ox * 0.01) * 0.8;
const driftY = Math.sin(driftTime + star.oy * 0.01) * 0.8;
x += driftX;
y += driftY;
if (pointer.x !== null) {
const dx = star.ox - pointer.x;
const dy = star.oy - pointer.y;
const dist = Math.sqrt(dx * dx + dy * dy) || 1;
const influence = Math.max(0, 1 - dist / 120);
const pointerStrength = isMobile ? 5 : 8;
x += (dx / dist) * influence * pointerStrength;
y += (dy / dist) * influence * pointerStrength;
}
ctx.beginPath();
ctx.fillStyle = `rgba(255, 255, 255, ${star.alpha + flicker * 0.3})`;
ctx.arc(x, y, star.r, 0, Math.PI * 2);
ctx.fill();
});
if (!reduceMotion) {
requestAnimationFrame(draw);
}
};const onMove = (event) => {
const rect = starCanvas.getBoundingClientRect();
pointer.x = event.clientX - rect.left;
pointer.y = event.clientY - rect.top;
};const onLeave = () => {
pointer.x = null;
pointer.y = null;
};setupStars();
draw();
window.addEventListener("resize", setupStars);
starCanvas.addEventListener("mousemove", onMove);
starCanvas.addEventListener("mouseleave", onLeave);
starCanvas.addEventListener("touchmove", (event) => {
if (!event.touches[0]) return;
onMove(event.touches[0]);
});
starCanvas.addEventListener("touchend", onLeave);
};starCanvases.forEach(initStarfield);