如何使用CSS3+JQuery实现悬浮墙式菜单

首先,让我们来了解什么是悬浮墙式菜单。悬浮墙式菜单一般出现在页面一侧或角落的固定位置,当页面滚动时,菜单会跟随滚动而移动,保持在视野范围内,以方便用户随时能够使用。

为了实现这个效果,我们可以使用CSS3中的position属性和Jquery中的scroll()方法。下面是具体的实现步骤:

  1. CSS部分:

首先,在HTML页面中,创建一个DIV元素,这个DIV元素就是悬浮的菜单。然后,为这个DIV元素添加样式,使其具有固定的位置,并且宽高、背景等样式可以自行设置。CSS代码如下所示:

#menu {
    position: fixed;
    top: 50px;  // 距离顶部50px
    left: 0;
    width: 200px;
    height: 300px;
    background: #fff;
    border: 1px solid #ccc;
    z-index: 999;  // 显示优先级最高
}
  1. JQuery部分:

在页面加载时,通过JQuery获取到menu元素,并获取到页面中与menu元素距离顶部的距离(offset.top)。然后,在滚动页面时,判断滚动距离和menu元素到顶部的距离的大小关系,动态设置menu元素的top值,使其保持固定位置。代码如下所示:

$(document).ready(function() {
    var menuOffset = $("#menu").offset().top;  // 距离顶部的距离
    $(window).scroll(function() {
        if ($(this).scrollTop() > menuOffset ) {
            $("#menu").css("top",$(this).scrollTop()-menuOffset);  // 设置top值,使其保持固定位置
        } else {
            $("#menu").css("top","0");  // 还原top值
        }   
    });
});

至此,一个简单的悬浮墙式菜单就完成了。下面,我们来看一下具体的应用案例。

示例一:带有浮动效果的悬浮菜单

这个实例是在之前的基础上进行了扩展,让菜单呈现出类似海浪浮动的效果。我们可以使用JQuery的animate()方法,让菜单在上下滑动时,带有缓动效果,使其看起来更加生动。

HTML代码:

<div id="menu">
    <ul>
        <li><a href="#section1">Section 1</a></li>
        <li><a href="#section2">Section 2</a></li>
        <li><a href="#section3">Section 3</a></li>
        <li><a href="#section4">Section 4</a></li>
        <li><a href="#section5">Section 5</a></li>
    </ul>
</div>
<div id="section1">
    <h2>Section 1</h2>
    <p>Content Section 1</p>
</div>
<div id="section2">
    <h2>Section 2</h2>
    <p>Content Section 2</p>
</div>
<div id="section3">
    <h2>Section 3</h2>
    <p>Content Section 3</p>
</div>
<div id="section4">
    <h2>Section 4</h2>
    <p>Content Section 4</p>
</div>
<div id="section5">
    <h2>Section 5</h2>
    <p>Content Section 5</p>
</div>

CSS代码:

#menu {
    position: fixed;
    top: 50px;
    left: 0;
    width: 200px;
    height: 300px;
    background: #fff;
    border: 1px solid #ccc;
    z-index: 999;
    overflow: hidden;  // 隐藏菜单内容的滚动条
}

#menu ul {
    padding: 0;
    margin: 0;
    list-style: none;
}

#menu li {
    padding: 10px;
    border-bottom: 1px solid #ccc;
}

#menu li a {
    text-decoration: none;
}

#section1,#section2,#section3,#section4,#section5 {
    margin-top: 400px;
    height: 500px;
}

#section1 { background: #FDEDEC; }
#section2 { background: #EAF2F8; }
#section3 { background: #FEF9E7; }
#section4 { background: #E8F8F5; }
#section5 { background: #FAE5D3; }

JQuery代码:

$(document).ready(function() {
    var menuOffset = $("#menu").offset().top;
    $(window).scroll(function() {
        if ($(this).scrollTop() > menuOffset ) {
            $("#menu").animate({top:$(this).scrollTop()-menuOffset}, 200, 'swing');  // 使用animate()方法,添加缓动效果
        } else {
            $("#menu").animate({top:0}, 200, 'swing');
        }   
    });
});

示例二:带有搜索框的悬浮菜单

这个实例在之前的基础上加入了搜索框,让菜单功能更加完善。我们可以先将悬浮菜单绝对定位,然后在菜单中添加搜索框元素,并使用CSS设置其样式。在滚动页面时,可以动态改变菜单的top和left值,使搜索框变成固定位置。代码如下所示:

HTML代码:

<div id="menu">
    <ul>
        <li><a href="#section1">Section 1</a></li>
        <li><a href="#section2">Section 2</a></li>
        <li><a href="#section3">Section 3</a></li>
        <li><a href="#section4">Section 4</a></li>
        <li><a href="#section5">Section 5</a></li>
    </ul>
    <div id="search-box">
        <input type="text" placeholder="Search...">
        <button type="submit">Search</button>
    </div>
</div>
<div id="section1">
    <h2>Section 1</h2>
    <p>Content Section 1</p>
</div>
<div id="section2">
    <h2>Section 2</h2>
    <p>Content Section 2</p>
</div>
<div id="section3">
    <h2>Section 3</h2>
    <p>Content Section 3</p>
</div>
<div id="section4">
    <h2>Section 4</h2>
    <p>Content Section 4</p>
</div>
<div id="section5">
    <h2>Section 5</h2>
    <p>Content Section 5</p>
</div>

CSS代码:

#menu {
    position: absolute;  // 使用绝对定位
    top: 100px;
    left: 0;
    width: 200px;
    background: #fff;
    border: 1px solid #ccc;
    z-index: 999;
    overflow: hidden;
}

#menu ul {
    padding: 0;
    margin: 0;
    list-style: none;
}

#menu li {
    padding: 10px;
    border-bottom: 1px solid #ccc;
}

#menu li a {
    text-decoration: none;
}

#search-box {
    padding: 10px;
}

#search-box input {
    width: 100%;
    padding: 5px;
    border: 1px solid #ccc;
    border-radius: 5px;
    outline: none;
}

#search-box button {
    margin-top: 10px;
    width: 100%;
    padding: 5px 10px;
    background-color: #ccc;
    border: none;
    border-radius: 5px;
    color: #fff;
    cursor: pointer;
}

#section1,#section2,#section3,#section4,#section5 {
    margin-top: 400px;
    height: 500px;
}

#section1 { background: #FDEDEC; }
#section2 { background: #EAF2F8; }
#section3 { background: #FEF9E7; }
#section4 { background: #E8F8F5; }
#section5 { background: #FAE5D3; }

JQuery代码:

$(document).ready(function() {
    var menuOffset = $("#menu").offset().top;
    var searchBoxOffset = $("#search-box").offset().top - menuOffset;  // 计算距离顶部的距离
    $(window).scroll(function() {
        if ($(this).scrollTop() > menuOffset ) {
            $("#menu").css({"top":$(this).scrollTop()-menuOffset, "left":$(this).scrollLeft()+10});  // 修改top和left值
            $("#search-box").css({"position":"fixed", "top":searchBoxOffset, "left":"10px"});  // 修改搜索框的top和left值
        } else {
            $("#menu").css({"top":"0px", "left":"0px"});
            $("#search-box").css({"position":"static"});
        }   
    });
});

通过以上两个示例,我们可以看到如何使用CSS3+JQuery来实现悬浮墙式菜单,并进行一些扩展,让菜单更加丰富和实用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用CSS3+JQuery实现悬浮墙式菜单 - Python技术站

(0)
上一篇 2023年6月9日
下一篇 2023年6月9日

相关文章

  • Vue侧滑菜单组件——DrawerLayout

    下面是Vue侧滑菜单组件——DrawerLayout的详细攻略。 1. 什么是Vue侧滑菜单组件——DrawerLayout Vue侧滑菜单组件——DrawerLayout是一个可以滑出/收回的菜单组件,通常用于移动端应用的导航、侧边栏等场景。它基于Vue框架开发,可以和其他Vue组件无缝集成,并且提供了丰富的可自定义属性,非常适合开发移动端应用。 2. 安…

    css 2023年6月11日
    00
  • jQuery 关于伪类选择符的使用说明

    jQuery 关于伪类选择符的使用说明 在 jQuery 中,你可以使用伪类选择符来选择一些特定的元素,比如选中光标当前所处行的最后一个元素,或者选中表格中的奇数行。伪类选择符共有三种类型,分别是基本伪类选择器、结构性伪类选择器和动态伪类选择器。 基本伪类选择器 基本伪类选择器是最常用的类型,常用的基本伪类选择器有以下几种: :eq(index) 选中某个索…

    css 2023年6月10日
    00
  • firefox不显示border通过清除float便可解决

    要让问题更加清晰,我们先来分析一下具体的情况: 场景:在 Firefox 浏览器中使用 border-radius 给一个 div 添加圆角样式,但边框(border)不显示(无边框)。 原因:该元素的子元素采用了浮动(float)布局,并且没有被清除,导致父元素没有正常地包裹子元素,因此边框无法正常显示。 那么,如何解决这个问题呢? 一个简单而有效的解决方…

    css 2023年6月10日
    00
  • 纯CSS定制文本省略的方法大全

    在网页设计中,经常需要对文本进行省略处理,以便在有限的空间内显示更多的内容。在CSS中,可以使用多种方法来实现文本省略,本攻略将介绍一些常用的方法。 1. 使用text-overflow属性 可以使用text-overflow属性来控制文本的省略方式,例如: <p class="ellipsis">这是一段需要省略的文本,这是…

    css 2023年5月18日
    00
  • 美化下拉列表

    当我们在网页中需要一个下拉列表的时候,除了基础的样式无法满足需求外,我们可能还需要对下拉列表进行美化,以便更好的融入到页面的风格中。下面是实现美化下拉列表的完整攻略。 1. 利用CSS样式来美化下拉列表 使用CSS样式对下拉列表样式进行美化是最简单的方式之一。以下是实现方式: (1)修改背景颜色、字体大小和颜色 通过修改background-color、co…

    css 2023年6月10日
    00
  • Vue中使用Openlayer实现加载动画效果

    下面我将详细讲解“Vue中使用Openlayer实现加载动画效果”的完整攻略,并附上两条示例说明。 前置知识 Vue.js OpenLayers HTML, CSS, JavaScript 实现步骤 步骤一:安装OpenLayers 在Vue项目中使用OpenLayers,需要先安装OpenLayers,可以使用npm进行安装: npm install ol…

    css 2023年6月9日
    00
  • javascript经典特效分享 手风琴、轮播图、图片滑动

    JavaScript经典特效分享 在前端开发中,JavaScript不仅可以用于数据交互、页面交互等,还可以用来实现各种各样的特效,比如手风琴、轮播图、图片滑动等。本文将一一介绍这三种常见的JavaScript特效的实现方法。 手风琴效果 手风琴效果就是指页面上有多个盒子,当用户单击某个盒子时,该盒子会变大,同时其他盒子变小。这种效果常用于呈现一些重要或突出…

    css 2023年6月10日
    00
  • 定义标题的最好方法

    当我们在写Markdown格式文本时,定义标题常常是必要的。标题的定义方法有多种,但根据个人使用习惯及美观度等因素,下面提供了两种最常见的方法: 方法一:使用“#”符号 使用“#”符号是最简单,也是最常用的一种方法,你只需要在文本最前面加上相应数量的“#”符号就可以了,一个“#”表示一级标题,两个“#”表示二级标题以此类推。 例如: # 一级标题 ## 二级…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部