查看“︁微件:Card”︁的源代码
←
微件:Card
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您没有权限编辑
微件
命名空间内的页面。
您可以查看和复制此页面的源代码。
<noinclude> 此Widget用于为卡牌添加交互功能。 使用方法:在页面底部添加 {{#widget:Card}} [[分类:Widget]] </noinclude><includeonly> <style> /* 卡牌悬停和点击动画 */ .card-deck-trans { cursor: pointer; transition: transform 0.2s ease, box-shadow 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; transition: color 0.2s ease; } .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; transition: color 0.2s ease; } .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; } .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'; // 等待DOM加载完成 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')) { 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 = this.cloneNode(true); clonedCard.classList.add('card-modal-card'); clonedCard.classList.remove('card-deck-trans'); clonedCard.style.width = '270px'; clonedCard.style.height = '384px'; clonedCard.style.cursor = 'default'; var clonedDeck = clonedCard.querySelector('.card-deck'); if (clonedDeck) { clonedDeck.style.transform = 'scale(0.6)'; } // 清空并添加内容 cardModalContent.innerHTML = ''; var cardContainer = document.createElement('div'); cardContainer.className = 'card-modal-card-container'; cardContainer.appendChild(clonedCard); cardModalContent.appendChild(cardContainer); // 检查是否显示闪光按钮 var sparkEnable = this.dataset.sparkEnable; var sort = this.dataset.sort; var cardId = this.dataset.cardId; // 判断条件:spark_enable=1 且 sort不是中立卡牌/怪物卡牌 if (sparkEnable === '1' && sort !== '中立卡牌' && sort !== '怪物卡牌') { 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'); // 使用MediaWiki API加载闪光卡牌 var apiUrl = mw.config.get('wgScriptPath') + '/api.php'; var params = { action: 'parse', text: '{{Card/display/spark|' + cardId + '}}', prop: 'text', format: 'json', contentmodel: 'wikitext' }; var url = apiUrl + '?' + Object.keys(params).map(function(key) { return encodeURIComponent(key) + '=' + encodeURIComponent(params[key]); }).join('&'); fetch(url) .then(function(response) { return response.json(); }) .then(function(data) { if (data.parse && data.parse.text) { var html = data.parse.text['*']; sparkModalContent.innerHTML = '<div class="spark-modal-title">闪光卡牌</div>' + html; // 为新加载的卡牌禁用点击事件 var sparkCards = sparkModalContent.querySelectorAll('.card-deck-trans'); sparkCards.forEach(function(card) { card.style.cursor = 'default'; card.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); }); }); } 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'); } }); // ESC键关闭模态框 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(); // 监听DOM变化,为动态加载的卡牌绑定事件 var observer = new MutationObserver(function(mutations) { bindCardEvents(); }); observer.observe(document.body, { childList: true, subtree: true }); } // 页面加载完成后初始化 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })(); </script> </includeonly>
返回
微件:Card
。
导航菜单
个人工具
登录
命名空间
微件
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
刷新
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息