MediaWiki

Common.js:修订间差异

来自卡厄思梦境WIKI

律Rhyme留言 | 贡献
无编辑摘要
标签已被回退
律Rhyme留言 | 贡献
撤销律Rhyme讨论)的修订版本303
标签撤销
第203行: 第203行:
});
});


            $('#filter-display').text(filterText.join(' | '));
/* 战斗员筛选系统 */
            $('#current-filters').fadeIn(300);
$(function() {
        } else {
    if ($('#character-filter-system').length === 0) return;
            $('#current-filters').fadeOut(300);
   
         }
    // 存储当前筛选条件
          
    var currentFilters = {
         // 更新统计
        rarity: 'all',
        updateStats();
         class: 'all',
       
         attribute: 'all',
        // 如果没有结果,显示提示
         search: ''
        if (visibleCount === 0) {
    };
            if ($('#no-results').length === 0) {
   
                $('#character-container').append(
    // 定义颜色
                    '<div id="no-results" style="width: 100%; text-align: center; padding: 50px 20px; color: #6c757d; font-size: 16px;">' +
    var colors = {
                    '<div style="font-size: 48px; margin-bottom: 20px;">😔</div>' +
        normal: '#6c757d',
                    '没有找到符合条件的战斗员<br>' +
        active: '#007bff',
                    '<small style="font-size: 14px; color: #adb5bd;">尝试修改筛选条件或减少关键词</small>' +
        hover: '#0056b3',
                    '</div>'
        reset: '#dc3545',
                );
        resetHover: '#c82333'
            }
    };
        } else {
   
            $('#no-results').remove();
    // 初始化统计
        }
    updateStats();
    }
      
      
     // 更新统计信息
     // 筛选按钮点击事件
     function updateStats() {
     $('.filter-btn').on('click', function() {
         var total = $('.character-card').length;
         var filterType = $(this).data('filter');
         var visible = $('.character-card:visible').length;
         var filterValue = $(this).data('value');
          
          
         // 动画更新数字
         // 更新当前筛选条件
         animateNumber($('#visible-count'), visible);
         currentFilters[filterType] = filterValue;
        animateNumber($('#total-count'), total);
          
          
         // 根据显示比例改变统计颜色
         // 更新按钮样式 - 使用内联样式
         var percentage = total > 0 ? (visible / total) * 100 : 0;
         $('.filter-' + filterType.replace('attribute', 'attr')).each(function() {
        var statsColor = '#28a745'; // 绿色
            $(this).css('background-color', colors.normal);
         if (percentage < 50) statsColor = '#ffc107'; // 黄色
         });
         if (percentage < 25) statsColor = '#dc3545'; // 红色
         $(this).css('background-color', colors.active);
          
          
         $('#visible-count').css('color', statsColor);
         // 执行筛选
     }
        applyFilters();
     });
      
      
     // 数字动画效果
     // 筛选按钮悬停效果
     function animateNumber($element, target) {
     $('.filter-btn').on('mouseenter', function() {
         var current = parseInt($element.text()) || 0;
         var currentBg = $(this).css('background-color');
         if (current === target) return;
         $(this).data('original-bg', currentBg);
          
          
         var increment = target > current ? 1 : -1;
         if (currentBg === 'rgb(108, 117, 125)' || currentBg === colors.normal) {
        var steps = Math.abs(target - current);
             $(this).css({
        var duration = Math.min(500, steps * 20);
                 'background-color': colors.hover,
        var stepDuration = duration / steps;
                 'transform': 'scale(1.05)'
       
        var timer = setInterval(function() {
            current += increment;
            $element.text(current);
           
            if (current === target) {
                clearInterval(timer);
             }
        }, stepDuration);
    }
   
    // 为搜索框添加清除按钮
    function addClearButton() {
        var $searchInput = $('#character-search-input');
        if ($searchInput.length > 0 && $('#clear-search').length === 0) {
            var $clearBtn = $('<span>', {
                 id: 'clear-search',
                 text: '',
                style: 'position: relative; left: -25px; cursor: pointer; color: #6c757d; display: none;'
             });
             });
           
        } else {
             $searchInput.after($clearBtn);
             $(this).css('transform', 'scale(1.05)');
           
        }
            // 显示/隐藏清除按钮
    }).on('mouseleave', function() {
            $searchInput.on('input', function() {
        var originalBg = $(this).data('original-bg');
                if ($(this).val().length > 0) {
        if (originalBg) {
                    $clearBtn.show();
            $(this).css({
                } else {
                 'background-color': originalBg,
                    $clearBtn.hide();
                 'transform': 'scale(1)'
                }
            });
           
            // 清除按钮点击事件
            $clearBtn.on('click', function() {
                 $searchInput.val('').trigger('input');
                 currentFilters.search = '';
                applyFilters();
             });
             });
        } else {
            $(this).css('transform', 'scale(1)');
         }
         }
     }
     });
      
      
     // 初始化清除按钮
     // 搜索框事件
     addClearButton();
     $('#character-search').on('input', function() {
        currentFilters.search = $(this).val().toLowerCase();
        applyFilters();
    });
      
      
     // 添加键盘快捷键
     // 重置按钮
     $(document).on('keydown', function(e) {
     $('#reset-filters').on('click', function() {
         // Ctrl/Cmd + F 聚焦搜索框
        currentFilters = {
         if ((e.ctrlKey || e.metaKey) && e.key === 'f') {
            rarity: 'all',
            e.preventDefault();
            class: 'all',
            $('#character-search-input').focus().select();
            attribute: 'all',
         }
            search: ''
        };
       
         // 重置所有按钮样式
         $('.filter-btn').css('background-color', colors.normal);
        $('.filter-btn[data-value="all"]').css('background-color', colors.active);
       
        // 清空搜索框
        $('#character-search').val('');
       
        // 显示所有角色
        $('.character-card').show();
          
        // 隐藏筛选显示
        $('#current-filters').hide();
          
          
         // ESC 清除搜索
         // 更新统计
         if (e.key === 'Escape') {
         updateStats();
            if ($('#character-search-input').is(':focus')) {
    });
                $('#character-search-input').val('').trigger('input');
   
                currentFilters.search = '';
    // 重置按钮悬停效果
                applyFilters();
    $('#reset-filters').on('mouseenter', function() {
            }
        $(this).css({
         }
            'background-color': colors.resetHover,
            'transform': 'scale(1.05)'
        });
    }).on('mouseleave', function() {
        $(this).css({
            'background-color': colors.reset,
            'transform': 'scale(1)'
         });
     });
     });
      
      
     // 高亮搜索关键词(可选功能)
     // 应用筛选
     function highlightSearchTerm() {
     function applyFilters() {
         if (currentFilters.search !== '') {
         var hasFilter = false;
            $('.character-card:visible').each(function() {
        var filterText = [];
                var $card = $(this);
        var visibleCount = 0;
                var $nameElement = $card.find('.character-name');
       
                if ($nameElement.length > 0) {
        $('.character-card').each(function() {
                    var originalText = $nameElement.data('original-text') || $nameElement.text();
            var $card = $(this);
                    $nameElement.data('original-text', originalText);
            var show = true;
                   
           
                    var regex = new RegExp('(' + currentFilters.search + ')', 'gi');
            // 检查稀有度
                     var highlightedText = originalText.replace(regex, '<span style="background-color: #ffeb3b; font-weight: bold;">$1</span>');
            if (currentFilters.rarity !== 'all') {
                    $nameElement.html(highlightedText);
                if ($card.data('rarity') !== currentFilters.rarity) {
                     show = false;
                 }
                 }
             });
                hasFilter = true;
        } else {
             }
             // 恢复原始文本
           
             $('.character-name').each(function() {
             // 检查职业
                 var originalText = $(this).data('original-text');
             if (currentFilters.class !== 'all') {
                if (originalText) {
                 if ($card.data('class') !== currentFilters.class) {
                     $(this).text(originalText);
                     show = false;
                 }
                 }
            });
                hasFilter = true;
        }
    }
   
    // 保存和加载用户偏好
    var userPreferences = {
        save: function() {
            if (typeof(Storage) !== "undefined") {
                localStorage.setItem('characterFilters', JSON.stringify(currentFilters));
                localStorage.setItem('filterTimestamp', Date.now());
             }
             }
        },
           
        load: function() {
            // 检查属性
             if (typeof(Storage) !== "undefined") {
             if (currentFilters.attribute !== 'all') {
                 var saved = localStorage.getItem('characterFilters');
                 if ($card.data('attribute') !== currentFilters.attribute) {
                var timestamp = localStorage.getItem('filterTimestamp');
                     show = false;
               
                // 只在24小时内有效
                if (saved && timestamp) {
                     var age = Date.now() - parseInt(timestamp);
                    if (age < 24 * 60 * 60 * 1000) {
                        return JSON.parse(saved);
                    }
                 }
                 }
                hasFilter = true;
             }
             }
             return null;
              
        },
            // 检查搜索
        clear: function() {
             if (currentFilters.search !== '') {
             if (typeof(Storage) !== "undefined") {
                 var name = $card.data('name').toLowerCase();
                 localStorage.removeItem('characterFilters');
                 if (name.indexOf(currentFilters.search) === -1) {
                 localStorage.removeItem('filterTimestamp');
                    show = false;
                }
                hasFilter = true;
             }
             }
        }
           
    };
            // 显示或隐藏卡片
   
            if (show) {
    // 可选:加载用户上次的筛选设置
                $card.fadeIn(200);
    var savedFilters = userPreferences.load();
                visibleCount++;
    if (savedFilters) {
             } else {
        currentFilters = savedFilters;
                 $card.fadeOut(200);
        // 应用保存的筛选
        setTimeout(function() {
            applyFilters();
             // 更新UI状态
            if (currentFilters.search) {
                 $('#character-search-input').val(currentFilters.search);
             }
             }
            // 更新按钮状态
        });
            Object.keys(currentFilters).forEach(function(filterType) {
       
                if (filterType !== 'search') {
        // 更新筛选条件显示
                    $('.filter-btn[data-filter="' + filterType + '"][data-value="' + currentFilters[filterType] + '"]')
        if (hasFilter) {
                        .css('background-color', colors.active);
            if (currentFilters.rarity !== 'all') filterText.push('稀有度:' + currentFilters.rarity);
                }
            if (currentFilters.class !== 'all') filterText.push('职业:' + currentFilters.class);
             });
             if (currentFilters.attribute !== 'all') filterText.push('属性:' + currentFilters.attribute);
        }, 100);
            if (currentFilters.search !== '') filterText.push('搜索:' + currentFilters.search);
    }
   
    // 在筛选改变时保存
    $(window).on('beforeunload', function() {
        userPreferences.save();
    });
   
    // 添加筛选提示
    function showFilterTip() {
        if ($('#filter-tip').length === 0 && Math.random() < 0.1) { // 10%概率显示
            var tips = [
                '提示:按 Ctrl+F 可以快速聚焦搜索框',
                '提示:可以同时使用多个筛选条件',
                '提示:搜索支持实时预览结果',
                '提示:你的筛选设置会自动保存24小时'
            ];
            var randomTip = tips[Math.floor(Math.random() * tips.length)];
              
              
             $('<div>', {
             $('#filter-display').text(filterText.join(' | '));
                id: 'filter-tip',
             $('#current-filters').show();
                html: '<span style="color: #17a2b8;">💡 ' + randomTip + '</span>',
        } else {
                style: 'padding: 10px; background-color: #d1ecf1; border: 1px solid #bee5eb; border-radius: 5px; margin-bottom: 10px;'
            $('#current-filters').hide();
             }).prependTo('#filter-controls').delay(5000).fadeOut(500, function() {
                $(this).remove();
            });
         }
         }
       
        // 更新统计
        updateStats();
     }
     }
      
      
     // 初始显示提示
     // 更新统计信息
     setTimeout(showFilterTip, 1000);
     function updateStats() {
});
        var visibleCount = $('.character-card:visible').length;
 
         var totalCount = $('.character-card').length;
/* 添加CSS样式通过JavaScript */
        $('#visible-count').text(visibleCount);
$(function() {
        $('#total-count').text(totalCount);
    if ($('#character-filter-style').length === 0) {
         $('<style>', {
            id: 'character-filter-style',
            text: `
                #character-filter-system * {
                    box-sizing: border-box;
                }
               
                .filter-btn, #reset-filters, #search-button {
                    transition: all 0.3s ease;
                    user-select: none;
                }
               
                .filter-btn:active, #reset-filters:active, #search-button:active {
                    transform: scale(0.95) !important;
                }
               
                #character-search-input {
                    transition: border-color 0.3s ease;
                }
               
                #character-search-input:focus {
                    border-color: #80bdff !important;
                    outline: none;
                    box-shadow: 0 0 0 0.2rem rgba(0,123,255,.25);
                }
               
                .character-card {
                    transition: all 0.3s ease;
                }
               
                .character-card:hover {
                    transform: translateY(-5px);
                    box-shadow: 0 5px 15px rgba(0,0,0,0.2);
                }
               
                #no-results {
                    animation: fadeIn 0.5s ease;
                }
               
                @keyframes fadeIn {
                    from { opacity: 0; transform: translateY(10px); }
                    to { opacity: 1; transform: translateY(0); }
                }
               
                @media (max-width: 768px) {
                    .filter-group {
                        margin-bottom: 20px !important;
                    }
                   
                    .filter-btn {
                        margin-bottom: 5px !important;
                    }
                   
                    #character-search-input {
                        width: 100% !important;
                        margin-bottom: 10px;
                    }
                   
                    #search-button, #reset-filters {
                        display: inline-block !important;
                        margin-bottom: 5px;
                    }
                }
            `
        }).appendTo('head');
     }
     }
});
});

2025年9月25日 (四) 16:32的版本

/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */

// 切换标签
(function() {
    'use strict';
    
    function initTabSwitcher() {
        var tabContainers = document.querySelectorAll('.resp-tabs');
        
        tabContainers.forEach(function(container) {
            var tabButtons = container.querySelectorAll('.czn-list-style');
            if (tabButtons.length === 0) return;
            
            // 检测模式
            var tabContents = container.querySelectorAll('.resp-tab-content');
            var portraitImages = document.querySelectorAll('.portrait-image');
            
            // 初始化
            tabButtons.forEach(function(button, index) {
                button.classList.toggle('active', index === 0);
            });
            
            if (tabContents.length > 0) {
                tabContents.forEach(function(content, index) {
                    content.style.display = index === 0 ? 'block' : 'none';
                });
            }
            
            if (portraitImages.length > 0) {
                portraitImages.forEach(function(image, index) {
                    image.style.display = index === 0 ? 'block' : 'none';
                });
            }
            
            // 点击事件
            tabButtons.forEach(function(button, index) {
                button.addEventListener('click', function(e) {
                    e.preventDefault();
                    
                    // 更新标签状态
                    tabButtons.forEach(function(btn, i) {
                        btn.classList.toggle('active', i === index);
                    });
                    
                    // 传统模式切换
                    if (tabContents.length > 0) {
                        tabContents.forEach(function(content, i) {
                            content.style.display = i === index ? 'block' : 'none';
                        });
                    }
                    
                    // 立绘模式切换
                    if (portraitImages.length > 0) {
                        portraitImages.forEach(function(image) {
                            image.style.display = 'none';
                        });
                        var targetImage = document.querySelector('.portrait-image[data-index="' + index + '"]');
                        if (targetImage) {
                            targetImage.style.display = 'block';
                        }
                    }
                });
            });
        });
    }
    
    // 初始化
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', initTabSwitcher);
    } else {
        initTabSwitcher();
    }
})();

// 卡牌模块相关的JavaScript功能
$(document).ready(function() {
    // 全局变量,跟踪当前打开的模态窗口
    var currentOpenModal = null;
    
    // 处理卡牌点击事件
    $(document).on('click', '.card-clickable', function(e) {
        e.stopPropagation();
        
        var modalId = $(this).data('modal-id');
        var modal = $('#' + modalId);
        
        if (modal.length) {
            // 如果有其他模态窗口打开,先关闭它
            if (currentOpenModal && currentOpenModal !== modalId) {
                $('#' + currentOpenModal).css('display', 'none');
            }
            
            // 检查是否有多个相同ID的模态窗口(这是问题的根源)
            var allModals = $('[id="' + modalId + '"]');
            if (allModals.length > 1) {
                // 如果有重复的模态窗口,只显示第一个,移除其他的
                allModals.slice(1).remove();
            }
            
            // 显示模态窗口
            modal.first().css('display', 'flex');
            currentOpenModal = modalId;
            
            // 确保主显示区域可见,变体区域隐藏
            var mainDisplay = modal.find('[id^="main-display-"]');
            var variantsDisplay = modal.find('.variants-display');
            var btn = modal.find('.lingguangyishan-btn');
            
            if (mainDisplay.length) mainDisplay.css('display', 'flex');
            if (variantsDisplay.length) variantsDisplay.css('display', 'none');
            if (btn.length) {
                btn.text('灵光一闪');
                btn.css('background-color', '#4a90e2');
            }
        }
    });
    
    // 处理灵光一闪按钮点击事件
    $(document).on('click', '.lingguangyishan-btn', function(e) {
        e.stopPropagation();
        var variantsId = $(this).data('variants-id');
        var modalId = $(this).data('modal-id');
        var variantsDisplay = $('#' + variantsId);
        var mainDisplay = $('#main-display-' + modalId);
        
        if (variantsDisplay.length && mainDisplay.length) {
            if (variantsDisplay.css('display') === 'none' || variantsDisplay.css('display') === '') {
                variantsDisplay.css('display', 'block');
                mainDisplay.css('display', 'none');
                $(this).text('返回');
                $(this).css('background-color', '#5cb85c');
            } else {
                variantsDisplay.css('display', 'none');
                mainDisplay.css('display', 'flex');
                $(this).text('灵光一闪');
                $(this).css('background-color', '#4a90e2');
            }
        }
    });
    
    // 处理模态窗口关闭事件
    $(document).on('click', '.card-modal', function(e) {
        if (e.target === this) {
            $(this).css('display', 'none');
            currentOpenModal = null;
            
            // 重置显示状态
            var mainDisplay = $(this).find('[id^="main-display-"]');
            var variantsDisplay = $(this).find('.variants-display');
            var btn = $(this).find('.lingguangyishan-btn');
            
            if (mainDisplay.length) mainDisplay.css('display', 'flex');
            if (variantsDisplay.length) variantsDisplay.css('display', 'none');
            if (btn.length) {
                btn.text('灵光一闪');
                btn.css('background-color', '#4a90e2');
            }
        }
    });
    
    // 阻止模态窗口内容区域的点击事件冒泡
    $(document).on('click', '.modal-main-content', function(e) {
        e.stopPropagation();
    });
    
    // 添加按钮悬停效果
    $(document).on('mouseenter', '.lingguangyishan-btn', function() {
        if ($(this).text() === '灵光一闪') {
            $(this).css('background-color', '#357abd');
        } else {
            $(this).css('background-color', '#449d44');
        }
    });
    
    $(document).on('mouseleave', '.lingguangyishan-btn', function() {
        if ($(this).text() === '灵光一闪') {
            $(this).css('background-color', '#4a90e2');
        } else {
            $(this).css('background-color', '#5cb85c');
        }
    });
    
    // 处理ESC键关闭模态窗口
    $(document).on('keydown', function(e) {
        if (e.key === 'Escape' || e.keyCode === 27) {
            if (currentOpenModal) {
                $('#' + currentOpenModal).css('display', 'none');
                currentOpenModal = null;
            }
        }
    });
    
    // 页面加载完成后,清理重复的模态窗口
    setTimeout(function() {
        $('.card-modal').each(function() {
            var modalId = $(this).attr('id');
            var duplicates = $('[id="' + modalId + '"]');
            if (duplicates.length > 1) {
                duplicates.slice(1).remove();
            }
        });
    }, 100);
});

/* 战斗员筛选系统 */
$(function() {
    if ($('#character-filter-system').length === 0) return;
    
    // 存储当前筛选条件
    var currentFilters = {
        rarity: 'all',
        class: 'all',
        attribute: 'all',
        search: ''
    };
    
    // 定义颜色
    var colors = {
        normal: '#6c757d',
        active: '#007bff',
        hover: '#0056b3',
        reset: '#dc3545',
        resetHover: '#c82333'
    };
    
    // 初始化统计
    updateStats();
    
    // 筛选按钮点击事件
    $('.filter-btn').on('click', function() {
        var filterType = $(this).data('filter');
        var filterValue = $(this).data('value');
        
        // 更新当前筛选条件
        currentFilters[filterType] = filterValue;
        
        // 更新按钮样式 - 使用内联样式
        $('.filter-' + filterType.replace('attribute', 'attr')).each(function() {
            $(this).css('background-color', colors.normal);
        });
        $(this).css('background-color', colors.active);
        
        // 执行筛选
        applyFilters();
    });
    
    // 筛选按钮悬停效果
    $('.filter-btn').on('mouseenter', function() {
        var currentBg = $(this).css('background-color');
        $(this).data('original-bg', currentBg);
        
        if (currentBg === 'rgb(108, 117, 125)' || currentBg === colors.normal) {
            $(this).css({
                'background-color': colors.hover,
                'transform': 'scale(1.05)'
            });
        } else {
            $(this).css('transform', 'scale(1.05)');
        }
    }).on('mouseleave', function() {
        var originalBg = $(this).data('original-bg');
        if (originalBg) {
            $(this).css({
                'background-color': originalBg,
                'transform': 'scale(1)'
            });
        } else {
            $(this).css('transform', 'scale(1)');
        }
    });
    
    // 搜索框事件
    $('#character-search').on('input', function() {
        currentFilters.search = $(this).val().toLowerCase();
        applyFilters();
    });
    
    // 重置按钮
    $('#reset-filters').on('click', function() {
        currentFilters = {
            rarity: 'all',
            class: 'all',
            attribute: 'all',
            search: ''
        };
        
        // 重置所有按钮样式
        $('.filter-btn').css('background-color', colors.normal);
        $('.filter-btn[data-value="all"]').css('background-color', colors.active);
        
        // 清空搜索框
        $('#character-search').val('');
        
        // 显示所有角色
        $('.character-card').show();
        
        // 隐藏筛选显示
        $('#current-filters').hide();
        
        // 更新统计
        updateStats();
    });
    
    // 重置按钮悬停效果
    $('#reset-filters').on('mouseenter', function() {
        $(this).css({
            'background-color': colors.resetHover,
            'transform': 'scale(1.05)'
        });
    }).on('mouseleave', function() {
        $(this).css({
            'background-color': colors.reset,
            'transform': 'scale(1)'
        });
    });
    
    // 应用筛选
    function applyFilters() {
        var hasFilter = false;
        var filterText = [];
        var visibleCount = 0;
        
        $('.character-card').each(function() {
            var $card = $(this);
            var show = true;
            
            // 检查稀有度
            if (currentFilters.rarity !== 'all') {
                if ($card.data('rarity') !== currentFilters.rarity) {
                    show = false;
                }
                hasFilter = true;
            }
            
            // 检查职业
            if (currentFilters.class !== 'all') {
                if ($card.data('class') !== currentFilters.class) {
                    show = false;
                }
                hasFilter = true;
            }
            
            // 检查属性
            if (currentFilters.attribute !== 'all') {
                if ($card.data('attribute') !== currentFilters.attribute) {
                    show = false;
                }
                hasFilter = true;
            }
            
            // 检查搜索
            if (currentFilters.search !== '') {
                var name = $card.data('name').toLowerCase();
                if (name.indexOf(currentFilters.search) === -1) {
                    show = false;
                }
                hasFilter = true;
            }
            
            // 显示或隐藏卡片
            if (show) {
                $card.fadeIn(200);
                visibleCount++;
            } else {
                $card.fadeOut(200);
            }
        });
        
        // 更新筛选条件显示
        if (hasFilter) {
            if (currentFilters.rarity !== 'all') filterText.push('稀有度:' + currentFilters.rarity);
            if (currentFilters.class !== 'all') filterText.push('职业:' + currentFilters.class);
            if (currentFilters.attribute !== 'all') filterText.push('属性:' + currentFilters.attribute);
            if (currentFilters.search !== '') filterText.push('搜索:' + currentFilters.search);
            
            $('#filter-display').text(filterText.join(' | '));
            $('#current-filters').show();
        } else {
            $('#current-filters').hide();
        }
        
        // 更新统计
        updateStats();
    }
    
    // 更新统计信息
    function updateStats() {
        var visibleCount = $('.character-card:visible').length;
        var totalCount = $('.character-card').length;
        $('#visible-count').text(visibleCount);
        $('#total-count').text(totalCount);
    }
});