仿apple官网顶部菜单

最近闲来无事学习一下前端技术,看见apple官网挺好看,特别是顶部的菜单在鼠标悬停在title上,下方会弹出子菜单,过程很丝滑很有高级感,所以我就试着模仿也做了一个,效果还过得去。框架使用的vue,直接用html也可以,我习惯了使用vue创建项目,废话不多说直接上代码

apple官网菜单

效果

效果

页面布局

<div class="container" @mouseleave="closeBottom">
        <div class="menu-container">
            <div class="top-menu">
                <div class="logo">
                    <img src="../assets/static/svg/appli-logo.svg" alt="">
                </div>
                <div class="items">
                    <div class="item">
                        商店
                    </div>
                    <div class="item" @mouseenter="showBottom">
                        Mac
                    </div>
                    <div class="item">
                        iPad
                    </div>
                    <div class="item">
                        iPhone
                    </div>
                    <div class="item">
                        Watch
                    </div>
                    <div class="item">
                        Vision
                    </div>
                    <div class="item">
                        AirPods
                    </div>
                    <div class="item">
                        家居
                    </div>
                    <div class="item">
                        娱乐
                    </div>
                    <div class="item">
                        配件
                    </div>
                    <div class="item">
                        技术支持
                    </div>
                </div>
                <div class="search">
                    <img src="../assets/static/svg/查询.svg" alt="">
                </div>
                <div class="shop">
                    <img src="../assets/static/svg/shopping.svg" alt="">
                </div>
            </div>
            <div ref="bottomMenu" class="bottom-menu">
                <div class="content">
                    <!-- 详细菜单 -->
                    <div class="item" v-for="item in getDescChildList(2)" :key="item.title">
                        <!-- 标题 -->
                        <div class="title">
                            {{ item.title }}
                        </div>
                        <div ref="largeContainer" class="large-container">
                            <!-- 大字item -->
                            <div class="large" v-for="text in item.largeItems" :key="text">
                                {{ text }}
                            </div>
                        </div>
                        <div class="min-container">
                            <!-- 小字item -->
                            <div class="min" v-for="text in item.minItems" :key="text">
                                {{ text }}
                            </div>
                        </div>
                    </div>
                </div>

            </div>
        </div>

    </div>

js

<script setup>
import { ref } from "vue";

const bottomMenu = ref(null);

const largeContainer = ref(null);

const descMenus = ref([
    {
        id: 2,
        content:
            [
                {
                    title: "探索",
                    largeItems: [
                        "探索全部Mac机型",
                        "MacBook Air",
                        "MacBook Pro",
                        "iMac",
                        "Mac mini",
                        "Mac Studio",
                        "Mac Pro",
                        "显示器"
                    ],
                    minItems: [
                        "Mac 机型比较",
                        "有 Mac 都好办"
                    ]
                },
                {
                    title: "选购 Mac",
                    minItems: [
                        "选购 Mac",
                        "Mac 配件",
                        "Apple Trade In 换购计划",
                        "分期付款",
                        "高校学生优惠活动"
                    ]
                },
                {
                    title: "选购 相关",
                    minItems: [
                        "选购 Mac",
                        "Mac 配件",
                        "Apple Trade In 换购计划",
                        "分期付款",
                        "高校学生优惠活动"
                    ]
                }
            ]
    }
])

const getDescChildList = (id) => {
    var childList = descMenus.value.find(menu => menu.id === id)?.content;
    return childList;
}

const showBottom = () => {
    // debugger
    bottomMenu.value.classList.add('open');

    setTimeout(() => {
        debugger

        var items = document.querySelectorAll('.content .item');
        for (let i = 0; i < items.length; i++) {
            const larges = items[i].querySelectorAll('.large-container .large');

            const mins = items[i].querySelectorAll('.min-container .min');

            for (let i = 0; i < larges.length; i++) {
                larges[i].classList.add("show");
                larges[i].style.transitionDelay = `${i / 30}s`;
            }
            const endTime = (larges.length - 1) / 30;
            for (let i = 0; i < mins.length; i++) {
                mins[i].classList.add("show");
                mins[i].style.transitionDelay = `${i / 30 + endTime}s`;
            }

            console.log();

        }
    }, 200)
}

const closeBottom = () => {
    var larges = document.querySelectorAll('.large-container .large')
    var mins = document.querySelectorAll('.min-container .min');
    for (let i = 0; i < larges.length; i++) {
        larges[i].classList.remove("show");
        larges[i].style.transitionDelay = '';
    }

    for (let i = 0; i < mins.length; i++) {
        mins[i].classList.remove("show");
        mins[i].style.transitionDelay = '';
    }

    bottomMenu.value.classList.remove('open');
}

function showDescMenu() {
    var jsonData = JSON.stringify(descMenus.value);
    console.log('数据', descMenus.value)
}

getDescChildList();
showDescMenu();

</script>

代码已上传需要请自取:https://gitee.com/chu-darui/imitate-apple-web

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: HTML表单下拉菜单可以使用<select>元素来创建。下面是一个例子: ```html <form> <label for="cars">选择一辆车:</label> <select id="cars" name="cars"> <option value="volvo">沃尔沃</option> <option value="saab">萨博</option> <option value="mercedes">奔驰</option> <option value="audi">奥迪</option> </select> </form> ``` 在上面的例子中,<select>元素创建了一个下拉菜单,其中包含了四个选项。每个选项都是使用<option>元素来定义的。 "value"属性定义了每个选项的值,而在<option>标签之间的文本则是每个选项的显示文本。 当用户选择一个选项时,所选选项的"value"属性将被提交到服务器。 ### 回答2: HTML表单下拉菜单是一种用于收集用户输入信息的交互元素。它由`<select>`元素和其中的一个或多个`<option>`元素组成。 `<select>`元素是下拉菜单的容器,它可以包含多个`<option>`元素作为可选项。可以通过设置`<select>`元素的属性来控制下拉菜单的样式和行为。例如,可以使用`name`属性指定下拉菜单的名称,以便在表单提交时能够将用户选择的值传递给服务器。 `<option>`元素定义了下拉菜单中的一个选项。可以使用`value`属性为每个选项设置一个值,这个值会在表单提交时发送到服务器。可以使用文本内容作为选项的标签,也可以使用`selected`属性为默认选中的选项添加该属性。此外,还可以使用`disabled`属性来禁用某个选项,使其不可选择。 当用户点击下拉菜单时,会出现一个下拉列表,其中包含所有的选项。用户可以通过鼠标或键盘选择其中的一个选项。选中的选项会显示在下拉菜单顶部,作为当前选择的值。 下拉菜单的使用场景很多,例如,可以用于选择国家、城市、日期、性别等信息。用户可以根据实际需求从可选项中选择,提供了更好的用户体验和数据准确性。 下拉菜单在前端开发中是非常常见的,可以使用HTML和CSS来自定义它的样式,也可以使用JavaScript来实现一些交互效果,如动态加载、联动选择等。 ### 回答3: HTML表单下拉菜单是一种用户界面元素,可用于在用户选择一项或多项选项时收集数据。下拉菜单由一个选择列表和一个下拉箭头按钮组成,用户可以点击箭头按钮展开列表,然后从中选择一个或多个选项。 在HTML中,下拉菜单可以通过<select>标签来创建。指定<select>标签的name属性可用于在提交表单时标识所选择的值。下拉菜单的选项则使用<option>标签来定义,可以使用value属性来指定每个选项的值。 例如,以下是一个HTML表单下拉菜单的示例代码: ``` <form action="submit-form.php" method="post"> <label for="fruits">选择水果:</label> <select name="fruits" id="fruits"> <option value="apple">苹果</option> <option value="orange">橙子</option> <option value="banana">香蕉</option> <option value="grape">葡萄</option> </select> <input type="submit" value="提交"> </form> ``` 在上述代码中,一个名为"fruits"的下拉菜单被创建,它包含四个选项:苹果、橙子、香蕉和葡萄。每个选项的值分别为"apple"、"orange"、"banana"和"grape"。当用户选择一个选项并提交表单时,所选项的值将作为"fruits"参数发送到"submit-form.php"页面进行处理。 HTML表单下拉菜单在Web开发中常用于收集用户的选择,例如选择商品类别、选择国家或选择生日等。开发人员可以使用CSS进行样式化,灵活地定制下拉菜单的外观和行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值