查看“︁微件:Card”︁的源代码
←
微件:Card
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您没有权限编辑
微件
命名空间内的页面。
您可以查看和复制此页面的源代码。
<noinclude> 此Widget用于为卡牌添加交互功能。 使用方法:在页面底部添加 {{#widget:Card}} [[分类:Widget]] </noinclude><includeonly> <style> /* 卡牌悬停和点击动画 */ .card-deck-trans { cursor: pointer; transition: transform 0.2s ease; } .card-deck-trans:hover { transform: scale(1.05); z-index: 10; } .card-deck-trans:active { transform: scale(0.98); } /* 模态框样式 */ .card-modal-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.8); z-index: 9999; justify-content: center; align-items: center; flex-direction: column; } .card-modal-overlay.active { display: flex; } /* 关闭按钮 */ .card-modal-close { position: absolute; top: 20px; right: 30px; font-size: 40px; color: #fff; cursor: pointer; z-index: 10001; line-height: 1; } .card-modal-close:hover { color: #ff6b6b; } /* 模态框内容容器 */ .card-modal-content { display: flex; flex-direction: column; align-items: center; justify-content: center; } /* 放大后的卡牌容器 */ .card-modal-card { position: relative; width: 270px; height: 384px; display: inline-block; } .card-modal-card .card-deck { position: absolute; width: 450px; height: 640px; transform: scale(0.6); transform-origin: top left; } /* 闪光按钮 */ .card-spark-button { margin-top: 20px; padding: 10px 30px; background-color: #4a4a4a; color: #ffd700; border: 1px solid #ffd700; border-radius: 4px; cursor: pointer; font-size: 16px; } .card-spark-button:hover { background-color: #5a5a5a; } /* 闪光卡牌模态框 */ .spark-modal-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.9); z-index: 10000; justify-content: center; align-items: flex-start; overflow-y: auto; padding: 60px 20px 20px 20px; box-sizing: border-box; } .spark-modal-overlay.active { display: flex; } .spark-modal-close { position: fixed; top: 20px; right: 30px; font-size: 40px; color: #fff; cursor: pointer; z-index: 10002; line-height: 1; } .spark-modal-close:hover { color: #ff6b6b; } .spark-modal-content { display: flex; flex-wrap: wrap; justify-content: center; gap: 20px; max-width: 1200px; } .spark-modal-content .card-deck-trans { cursor: default; pointer-events: none; } .spark-modal-content .card-deck-trans:hover { transform: none; } .spark-modal-title { width: 100%; text-align: center; color: #ffd700; font-size: 24px; margin-bottom: 20px; } .spark-loading { color: #fff; font-size: 18px; } </style> <div id="card-modal-overlay" class="card-modal-overlay"> <span class="card-modal-close" id="card-modal-close">×</span> <div class="card-modal-content" id="card-modal-content"></div> </div> <div id="spark-modal-overlay" class="spark-modal-overlay"> <span class="spark-modal-close" id="spark-modal-close">×</span> <div class="spark-modal-content" id="spark-modal-content"></div> </div> <script> (function() { 'use strict'; function init() { var cardModal = document.getElementById('card-modal-overlay'); var cardModalContent = document.getElementById('card-modal-content'); var cardModalClose = document.getElementById('card-modal-close'); var sparkModal = document.getElementById('spark-modal-overlay'); var sparkModalContent = document.getElementById('spark-modal-content'); var sparkModalClose = document.getElementById('spark-modal-close'); function bindCardEvents() { var cards = document.querySelectorAll('.card-deck-trans'); cards.forEach(function(card) { if (card.dataset.bound || card.closest('.spark-modal-content') || card.closest('.card-modal-content')) { return; } card.dataset.bound = 'true'; card.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); var cardDeck = this.querySelector('.card-deck'); if (!cardDeck) return; var clonedCard = document.createElement('div'); clonedCard.className = 'card-modal-card'; clonedCard.innerHTML = '<div class="card-deck">' + cardDeck.innerHTML + '</div>'; cardModalContent.innerHTML = ''; cardModalContent.appendChild(clonedCard); var sparkEnable = this.dataset.sparkEnable; var sort = this.dataset.sort; var cardId = this.dataset.cardId; if (sparkEnable === '1' && sort !== '中立卡牌' && sort !== '怪物卡牌' && cardId) { var sparkButton = document.createElement('button'); sparkButton.className = 'card-spark-button'; sparkButton.textContent = '闪光'; sparkButton.addEventListener('click', function(e) { e.stopPropagation(); openSparkModal(cardId); }); cardModalContent.appendChild(sparkButton); } cardModal.classList.add('active'); document.body.style.overflow = 'hidden'; }); }); } function openSparkModal(cardId) { sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div class="spark-loading">加载中...</div>'; sparkModal.classList.add('active'); var apiUrl = mw.config.get('wgScriptPath') + '/api.php'; var params = new URLSearchParams({ action: 'parse', text: '{{Card/display/spark|' + cardId + '}}', prop: 'text', format: 'json', contentmodel: 'wikitext' }); fetch(apiUrl + '?' + params.toString()) .then(function(response) { return response.json(); }) .then(function(data) { if (data.parse && data.parse.text) { var html = data.parse.text['*']; if (html.trim() === '' || html.indexOf('card-deck-trans') === -1) { sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div style="color: #fff;">暂无闪光卡牌</div>'; } else { sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div>' + html; } } else { sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div style="color: #fff;">暂无闪光卡牌</div>'; } }) .catch(function(error) { sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div><div style="color: #ff6b6b;">加载失败,请重试</div>'; console.error('Error loading spark cards:', error); }); } cardModalClose.addEventListener('click', function() { cardModal.classList.remove('active'); sparkModal.classList.remove('active'); document.body.style.overflow = ''; }); sparkModalClose.addEventListener('click', function() { sparkModal.classList.remove('active'); }); cardModal.addEventListener('click', function(e) { if (e.target === cardModal) { cardModal.classList.remove('active'); sparkModal.classList.remove('active'); document.body.style.overflow = ''; } }); sparkModal.addEventListener('click', function(e) { if (e.target === sparkModal) { sparkModal.classList.remove('active'); } }); document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { if (sparkModal.classList.contains('active')) { sparkModal.classList.remove('active'); } else if (cardModal.classList.contains('active')) { cardModal.classList.remove('active'); document.body.style.overflow = ''; } } }); bindCardEvents(); var observer = new MutationObserver(function() { bindCardEvents(); }); observer.observe(document.body, { childList: true, subtree: true }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })(); </script> </includeonly>
返回
微件:Card
。
导航菜单
个人工具
登录
命名空间
微件
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
刷新
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息