仿淘宝、京东首页icons横向滑动效果

news2024/12/22 0:55:19

一、效果展示

淘宝:

在这里插入图片描述

京东:

在这里插入图片描述

二、话不多说,直接上demo

  1. 案例效果

在这里插入图片描述

  1. 代码
<template>
    <div class="demo-page">
        <h1>滚动效果</h1>
        <div class='icons-slide-wrapper'>
            <div class="icons-container" ref="iconsContainer">
                <div class="icon-block" v-for="(p, blockIndex) in filterList" :key="blockIndex">
                    <a class="icon-item" v-for="(item, itemIndex) in p" :key="item.id || itemIndex" :href="item.route" @click="toggleIconHandler(item)">
                        <div class="item-img">
                            <img :src="item.icon" alt="">
                        </div>
                        <div class="item-name">{{ item.name }}</div>
                    </a>
                </div>
            </div>
            <div class="indicator-container" v-if="demoList && demoList.length > 10">
                <div class="indicator-nav" ref="indicatorContainer">
                    <div class="nav-slide" ref="navSlide"></div>
                </div>
            </div>
        </div>
        
    </div>
</template>

<script>

export default {
    data () {
        return {
            demoList: [
                {
                    id: 1,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '摇现金',
                    route: 'https://m.caihuoxia.com/u/hunter-market/index'
                },
                {
                    id: 2,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '百亿补贴'
                },
                {
                    id: 3,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '芭芭农场'
                },
                {
                    id: 4,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '水排序'
                },
                {
                    id: 5,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '饿了么'
                },
                {
                    id: 6,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '天天特卖'
                },
                {
                    id: 7,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '家电清洗'
                },
                {
                    id: 8,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '活动日历'
                },
                {
                    id: 9,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '领淘金币'
                },
                {
                    id: 10,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '全部频道'
                },
                {
                    id: 11,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '摇现金'
                },
                {
                    id: 12,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '百亿补贴'
                },
                {
                    id: 13,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '芭芭农场'
                },
                {
                    id: 14,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '水排序'
                },
                {
                    id: 15,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '饿了么'
                },
                {
                    id: 16,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '天天特卖'
                },
                {
                    id: 17,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '家电清洗'
                },
                {
                    id: 18,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '活动日历'
                },
                {
                    id: 19,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '领淘金币'
                },
                {
                    id: 20,
                    icon: 'https://gw.alicdn.com/imgextra/i2/O1CN01qrrUAN1wRjrhtfk6Q_!!6000000006305-2-tps-183-144.png_q90.jpg_.webp',
                    name: '全部频道'
                },
            ]
        }
    },
    methods: {
        toggleIconHandler (item) {
            console.log(item,'toggleIconHandlertoggleIconHandlertoggleIconHandler')
        }

    },
    created () {

    },
    computed: {
        filterList () {
            const groupedData = []
            const groupSize = 10 // 每组的大小
            for (let i = 0; i < this.demoList.length; i += groupSize) {
                groupedData.push(this.demoList.slice(i, i + groupSize))
            }
            return groupedData
        }
    },
    mounted () {
        // 获取元素引用
        const iconsContainer = this.$refs.iconsContainer
        const indicatorContainer = this.$refs.indicatorContainer
        const navSlide = this.$refs.navSlide

        // 添加滚动事件监听器
        this.scrollListener = () => {
            const scrollLeft = iconsContainer.scrollLeft
            const containerWidth = iconsContainer.clientWidth
            const totalWidth = iconsContainer.scrollWidth
            const indicatorNavWidth = indicatorContainer.clientWidth

            // 计算比例
            const ratio = containerWidth / totalWidth

            // 计算 nav-slide 的宽度和位置
            const navSlideWidth = indicatorNavWidth * ratio
            const maxScrollLeft = totalWidth - containerWidth
            // 当前滚动位置相对于最大滚动位置的比例
            const adjustedScrollLeft = Math.min(scrollLeft, maxScrollLeft)

            // 动态设置 nav-slide 的宽度和位置
            navSlide.style.width = navSlideWidth + "px"
            // 通过 (indicatorNavWidth - navSlideWidth) 确保 nav-slide 不会超出右侧边界。
            navSlide.style.transform = `translateX(${(adjustedScrollLeft / maxScrollLeft) * (indicatorNavWidth - navSlideWidth)}px)`
        }

        // 添加事件监听器
        if (this.demoList && this.demoList.length > 10) {
            iconsContainer.addEventListener("scroll", this.scrollListener)
        }
    },
    beforeDestroy () {
        // 移除事件监听器
        if (this.demoList && this.demoList.length > 10) {
            const iconsContainer = this.$refs.iconsContainer
            iconsContainer.removeEventListener("scroll", this.scrollListener)

        }
    },

}
</script>
<style lang="less" scoped>
.demo-page {
    margin: 0;
    padding: 0;
    overflow: hidden;
    background: #dedede;
    height: 100vh;
    padding: 12px;
}

.icons-slide-wrapper {
    height: auto;
    width: 100%;
    background-color: #FFFFFF;
    overflow: hidden;

    .icons-container {
        display: flex;
        overflow: hidden;
        overflow-x: auto;
        flex-wrap: nowrap;

        .icon-block {
            width: 100%;
            display: flex;
            flex-wrap: wrap;
            flex: 0 0 auto;
            margin-right: 10px;

            .icon-item {
                box-sizing: border-box;
                width: 62px;
                height: 62px;
                padding: 0 0px 3px;
                display: flex;
                flex-direction: column;
                align-items: center;
                justify-content: center;
                background-color: #f4f4f4;
                margin-right: 10px;
                margin-bottom: 12px;


                .item-img {
                    width: 42px;
                    height: 42px;

                    img {
                        width: 100%;
                        height: 42px;
                        object-fit: cover;
                    }
                }

                .item-name {
                    margin-top: 6px;
                    font-size: 12px;
                    transform: scale(0.91, 0.91);
                    font-family: PingFangSC, PingFang SC;
                    font-weight: 400;
                    color: #5E5E5E;
                    line-height: 11px;
                    max-width: 58px;
                    overflow: hidden;
                    white-space: nowrap;
                    text-overflow: ellipsis;

                }
            }

            .icon-item:nth-child(5n) {
                margin-right: 0;
            }
        }

        .icon-block:last-child {
            margin-right: 0;
        }

    }

    .icons-container::-webkit-scrollbar {
        width: 0;
        /* 隐藏垂直滚动条 */
        height: 0;
        /* 隐藏水平滚动条 */
    }

    .icons-container::-webkit-scrollbar-thumb {
        background-color: transparent;
        /* 隐藏滚动条thumb */
    }

    .indicator-container {
        display: flex;
        width: 100%;
        justify-content: center;

        .indicator-nav {
            width: 28px;
            height: 2px;
            background: #D8D8D8;
            border-radius: 3px;

            .nav-slide {
                height: 2px;
                width: 14px;
                border-radius: 3px;
                background-color: #fe4c1a;
                will-change: transform;
            }
        }
    }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1313750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s节点not ready

开发小伙伴反应&#xff0c;发布应用失败。检查后发现有个虚拟机挂掉了 启动后先重启服务&#xff1a;&#xff08;一般是自启动&#xff0c;自动拉起pod服务&#xff09; service docker restart docker ps |grep kube-apiserver|grep -v pause|awk ‘{print $1}’|xargs -i …

【SpringBoot】配置文件

配置文件官网 1. 配置方式 application.propertiesapplication.yml / application.yaml 2. 自定义配置信息 将实体类中的本应该写死的信息写在属性配置文件中。 可以使用 Value("${键名}") 获取&#xff0c;也可以使用 ConfigurationProperties(prefix"前…

C++_类的定义和使用

目录 1、类的引用 1.1 类的成员函数 1.2 类成员函数的声明和定义 2、类的定义 2.1 类的访问限定&#xff08;封装&#xff09; 3、类重名问题 4、类的实例化 4.1 类的大小 5、隐含的this指针 5.1 空指针问题 结语&#xff1a; 前言&#xff1a; C的类跟c语言中的结…

【Vue】日期格式化(全局)

系列文章 【Vue】vue增加导航标签 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/134965353 【Vue】Element开发笔记 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/133947977 【Vue】vue&#xff0c;在Windows IIS平台…

Tomcat的结构分析和请求处理原理解析

目录 Tomcat服务器&#xff1f;Tomcat结构处理请求流程Tomcat作用其他的web服务器 Tomcat服务器&#xff1f; 我们经常开口闭口“服务器”、“服务器”的&#xff0c;其实“服务器”是个很容易引发歧义的概念 其实&#xff0c;Tomcat服务器 Web服务器 Servlet/JSP容器&#…

java简易制作-王者荣耀游戏

一.准备工作 首先创建一个新的Java项目命名为“王者荣耀”&#xff0c;并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 创建一个名为“img”的文件夹来储存所需的图片素材。 二.代码呈现 package com.sxt; import javax…

人工智能联盟的首件神兵利器——“Purple Llama” 项目,旨为保护工智能模型安全性

Meta公司&#xff08;Meta Platform Inc&#xff09;&#xff0c;原名Facebook&#xff0c;创立于2004年2月4日&#xff0c;市值5321.71亿美元。总部位于美国加利福尼亚州门洛帕克。 Meta 公司推出了名为“Purple Llama”的项目&#xff0c;旨在保护和加固其开源人工智能模型。…

【MODBUS】Modbus的3种传输方式

概述 1979年&#xff0c;Modicon 首先推出了串行Modbus标准&#xff0c;后来由于网络的普及&#xff0c;需要更高的传输速度&#xff0c;1997年制定了基于TCP网络的Modbus标准。 所以总的可分为两个传输模式:基于串行链路的和基于以太网TCP/IP的。但是我个人还是习惯分为3种传…

【MySQL 索引】InooDB 索引实现

1 索引定义 维基百科对数据库索引的定义: 数据库索引是数据库管理系统&#xff08;DBMS&#xff09;中的一个排序数据结构, 以协助快速查询和更新数据库表中的数据。 MongoDB对索引的定义: 索引是一种特殊的数据结构, 以有序和便于遍历的形式存储数据集合中特定字段或一组字段…

蓝桥杯专题-真题版含答案-【制作表格】【5位黑洞数】【泊松分酒】【亲密数】

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

UG NX二次开发(C++)-库缺少需要的入口点的原因与解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、“库缺少需要的入口点”错误展示3、可能出现的原因与解决方案3.1 对于采用CTRL+U方式调用3.2 对于menu菜单下调用1、前言 在UG NX二次开发过程中,有时会遇到形形色色的bug,比如有个读…

可视化监控云平台/智能监控EasyCVR如何使用脚本创建ramdisk挂载并在ramdisk中临时运行

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防管理视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存…

【Spring Boot】内网穿透实现远程调用调试

文章目录 1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址 4.…

管理类联考——英语二——考点+记忆篇——大作文——表格

大作文Remarkablechangesconcerning主题词havebeenwitnessedinTheabovechartthoroughlyrevealedthefascinatingissue.Onecanseethat年份1,事物1wasonly数字1.ButwithinashortdurationofXyears,事物1bumpedto数字2in年份2.Apartfromthat,事物2hasenjoyedaslightdeclineduringthe…

基于3D-CGAN的跨模态MR脑肿瘤分割图像合成

3D CGAN BASED CROSS-MODALITY MR IMAGE SYNTHESIS FOR BRAIN TUMOR SEGMENTATION 基于3D-CGAN的跨模态MR脑肿瘤分割图像合成背景贡献实验方法Subject-specific local adaptive fusion&#xff08;针对特定主题的局部自适应融合&#xff09;Brain tumor segmentation model 损失…

外汇天眼:如果美元开始降息,会为市场带来哪些影响?

一、美元降息的影响 美元一旦开始降息&#xff0c;将对全球经济产生重要影响。 降息政策将带动美国内部的消费和投资增长。 透过降低借贷成本&#xff0c;鼓励个人和企业增加支出&#xff0c;刺激经济活动。 以最新数据为例&#xff0c;美国的消费者信心指数正在上升&#xff…

4.qml 3D-Light、DirectionalLight、PointLight、SpotLight、AxisHelper类深入学习

今天我们学习灯光类 首先来学习Light类&#xff0c;它是所有灯光的虚基类&#xff0c;该类是无法创建的&#xff0c;主要是为子类提供很多公共属性。 常用属性如下所示&#xff1a; ambientColor : color&#xff0c;该属性定义在被该光照亮之前应用于材质的环境颜色。默认值…

Halcon参考手册异常检测知识总结

1.1异常检测介绍 本章将介绍如何使用基于深度学习的异常检测和全局上下文异常检测。通过这两种方法&#xff0c;我们想要检测图像是否包含异常(异常是指偏离正常的事物&#xff0c;未知的事物)。 异常检测或全局上下文异常检测模型学习无异常图像的共同特征。经过训练的模型将…

CentOS7 OpenSSL升级到OpenSSH9.5p1

原文链接&#xff1a; CentOS7 OpenSSL升级1.1.1w&#xff1b;OpenSSH 升级 9.5p1 保姆级教程 openssl从3.1.0升级到3.1.1遇到的问题 注意操作时需要联网请参考如下链接 内网服务器联网安装依赖参见我的另一篇文章 一、 前言 OpenSSH 的加密功能需要用到OpenSSL&#xff0c;所…

STM32-UART-DMA HAL库缓冲收发

文章目录 1、说明1.1、注意事项&#xff1a;1.2、接收部分1.3、发送部分 2、代码2.1、初始化2.2、缓冲接收2.3、缓冲发送2.4、格式化打印 1、说明 1.1、注意事项&#xff1a; HAL库的DMA底层基本都会默认开启中断使能&#xff0c;如果在STM32CubeMx禁用了中断相关的功能&…