首页优化

简介: 对首页进行优化,重点改进侧边栏广告轮播与筛选功能交互。通过HTML结构重构、JS动态加载筛选项并实现标签页切换及价格过滤,提升页面响应式体验与用户操作流畅度,更贴近官网视觉效果。

3.首页优化
整体看起来还行,但是对照官网首页还是差点意思,我们以侧边栏为例做优化:

我们预期效果如下

改造的代码如下:
<!DOCTYPE html>

















限时特惠





新赛季开启















每日签到





热门活动















无畏契约

无畏契约手游交易平台













¥输入最低



¥输入限高























剩下的js、css和图标我们依然是替换,解读一下修改项
// 存储筛选选项数据
let filterOptionsData = {};

// 从后端获取筛选选项
async function loadFilterOptions() {
try {
const response = await fetch('/api/filter-options');
const result = await response.json();

    if (result.success) {
        filterOptionsData = result.data;
        renderFilterOptions();
    } else {
        console.error('获取筛选选项失败:', result.message);
    }
} catch (error) {
    console.error('加载筛选选项时出错:', error);
}

}

// 渲染筛选选项到页面
function renderFilterOptions() {
// 渲染外观选项
renderOptions('appearance-options', filterOptionsData.appearance || [], 'appearance');

// 渲染类别选项
renderOptions('category-options', filterOptionsData.category || [], 'category');

// 渲染品质选项
renderOptions('quality-options', filterOptionsData.quality || [], 'quality');

// 渲染收藏品选项
renderOptions('collectibles-options', filterOptionsData.collectibles || [], 'collectibles');

}

// 渲染单个筛选类型的选项
function renderOptions(containerId, options, filterType) {
const container = document.getElementById(containerId);
if (!container) return;

container.innerHTML = '';

options.forEach(option => {
    const optionElement = document.createElement('div');
    optionElement.className = 'filter-option';

    const checkbox = document.createElement('input');
    checkbox.type = 'checkbox';
    checkbox.id = `${filterType}-${option.value}`;
    checkbox.value = option.value;
    checkbox.dataset.filterType = filterType;

    const label = document.createElement('label');
    label.htmlFor = `${filterType}-${option.value}`;
    label.textContent = option.label;

    optionElement.appendChild(checkbox);
    optionElement.appendChild(label);
    container.appendChild(optionElement);
});

}

// 获取当前选中的筛选值
function getSelectedFilters(filterType) {
const checkboxes = document.querySelectorAll(input[data-filter-type="${filterType}"]:checked);
return Array.from(checkboxes).map(cb => cb.value);
}

// 标签页切换功能
document.addEventListener('DOMContentLoaded', function() {
// 首先加载筛选选项
loadFilterOptions();

// 初始化左右两侧的广告轮播
setTimeout(() => {
    initAdCarousel('.sidebar-left');
    initAdCarousel('.sidebar-right');
}, 100);

const tabs = document.querySelectorAll('.tab');
const filterSections = document.querySelectorAll('.filter-section');

tabs.forEach(tab => {
    tab.addEventListener('click', function() {
        const tabName = this.getAttribute('data-tab');

        // 移除所有活动状态
        tabs.forEach(t => t.classList.remove('active'));
        filterSections.forEach(section => section.classList.add('hidden'));

        // 添加当前活动状态
        this.classList.add('active');
        const targetSection = document.getElementById(`${tabName}-filter`);
        if (targetSection) {
            targetSection.classList.remove('hidden');
        }
    });
});

// 价格过滤按钮功能
const priceFilterBtn = document.getElementById('filter-btn');
if (priceFilterBtn) {
    priceFilterBtn.addEventListener('click', function() {
        const minPrice = document.getElementById('min-price').value;
        const maxPrice = document.getElementById('max-price').value;

        const filters = {
            price: {
                min: minPrice ? parseFloat(minPrice) : null,
                max: maxPrice ? parseFloat(maxPrice) : null
            }
        };

        console.log('价格筛选:', filters);
        applyFilters(filters);
    });
}

// 其他筛选类型的应用按钮
document.querySelectorAll('.filter-btn[data-filter-type]').forEach(btn => {
    btn.addEventListener('click', function() {
        const filterType = this.getAttribute('data-filter-type');
        const selectedValues = getSelectedFilters(filterType);

        const filters = {
            [filterType]: selectedValues
        };

        console.log(`${filterType}筛选:`, filters);
        applyFilters(filters);
    });
});

});

// 应用筛选(可以在这里调用API或过滤商品列表)
function applyFilters(filters) {
console.log('应用筛选条件:', filters);
// TODO: 在这里实现实际的筛选逻辑
// 例如:调用后端API获取筛选后的商品列表
}

// 广告轮播功能
function initAdCarousel(sidebarSelector) {
const sidebar = document.querySelector(sidebarSelector);
if (!sidebar) return;

const adItems = sidebar.querySelectorAll('.ad-item');
const indicators = sidebar.querySelectorAll('.indicator');
let currentIndex = 0;
let carouselInterval;

// 切换到指定索引的广告
function switchAd(index) {
    // 移除所有活动状态
    adItems.forEach(item => item.classList.remove('active'));
    indicators.forEach(indicator => indicator.classList.remove('active'));

    // 添加新的活动状态
    if (adItems[index]) {
        adItems[index].classList.add('active');
    }
    if (indicators[index]) {
        indicators[index].classList.add('active');
    }

    currentIndex = index;
}

// 切换到下一张广告
function nextAd() {
    const nextIndex = (currentIndex + 1) % adItems.length;
    switchAd(nextIndex);
}

// 启动自动轮播
function startCarousel() {
    carouselInterval = setInterval(nextAd, 5000); // 每5秒切换一次
}

// 停止自动轮播
function stopCarousel() {
    if (carouselInterval) {
        clearInterval(carouselInterval);
    }
}

// 为指示器添加点击事件
indicators.forEach((indicator, index) => {
    indicator.addEventListener('click', () => {
        switchAd(index);
        stopCarousel();
        startCarousel(); // 重新开始计时
    });
});

// 鼠标悬停时暂停轮播
sidebar.addEventListener('mouseenter', stopCarousel);
sidebar.addEventListener('mouseleave', startCarousel);

// 启动自动轮播
startCarousel();

}

● css文件就不用关注了,直接替换即可:
● 需要的图片素材,截至目前如下:

相关文章
|
1天前
|
前端开发
1.前端知识回顾
创建HTML文件需将后缀命名为.html,如“01-新浪新闻-标题-排版.html”。输入英文感叹号!后回车,自动生成基础结构,修改标题并保存。在浏览器中打开预览效果,确保页面正常显示,完成初步测试。(239字)
|
1天前
|
JavaScript 前端开发 测试技术
3.5 测试数据库删除
本节实现数据库的删除与修改功能测试。在`weaponSkinModel.js`中新增按ID修改价格和扣减库存的功能,通过`index.js`编写测试代码验证逻辑正确性,结合控制台输出与数据库数据双向校验,确保增删改查操作符合预期,提升数据交互稳定性。(238字)
|
1天前
|
数据可视化 关系型数据库 MySQL
2.MySQL核心知识回顾
本节介绍MySQL的安装方法,若本地未安装,可使用提供的安装包。安装完成后,推荐使用Navicat、SQLyog或DataGrip等可视化工具进行操作,方便高效管理数据库。
|
1天前
|
JavaScript
1.2 NodeJS安装
本节介绍Node.js的安装方法,可通过官网或本地安装包进行。安装时需选择无空格的英文路径,并参考手册完成。安装后通过“win+R→cmd→node -v”命令验证环境,能输出版本号即成功,版本无需与示例一致。
|
1天前
|
前端开发 JavaScript
修改index.html
本项目为“无畏契约皮肤商城”前端页面,包含左右广告栏、导航筛选、商品展示与分页功能,支持价格、外观、类别等多维度筛选,结构清晰,适配移动端,通过HTML、CSS与JS实现交互动态加载。
|
1天前
|
JSON 前端开发 JavaScript
修改server.js
在 `server.js` 中新增分页查询API,支持按价格、外观、类别等条件筛选武器皮肤,实现前端分页与多参数过滤功能,提升数据加载效率与用户体验。
|
1天前
|
JavaScript 前端开发
修改weaponSkinModel.js
在 `weaponSkinModel.js` 中新增分页查询功能,支持按类别、品质、收藏状态、基础武器等条件筛选,返回数据列表及分页信息,提升查询效率与灵活性。
|
1天前
|
SQL 存储
查找全部武器
本文介绍如何通过SQL分页查询“武器皮肤”表数据,包含建表语句、测试数据插入及字段说明,涵盖武器名称、价格、品质、图片等信息,适用于游戏商城或道具管理系统开发。
|
1天前
|
存储 前端开发 JavaScript
首页搭建
本项目为无畏契约皮肤商城首页搭建,包含HTML结构、CSS样式与JS交互逻辑。实现商品展示、多条件筛选及响应式布局,通过Node.js启动服务,构建完整前端页面。
|
1天前
|
移动开发 HTML5
完成新浪新闻-正文-视频
使用HTML5的`&lt;video&gt;`标签为新浪新闻正文添加视频,支持在线资源、相对路径和绝对路径三种引入方式。通过设置src、width、height及controls等属性,可自定义视频播放控件与样式。