js 右侧浮动层效果实现代码(跟随滚动)

yizhihongxing

下面是详细讲解“js 右侧浮动层效果实现代码(跟随滚动)”的完整攻略。

概述

右侧浮动层效果是一种常见的网页设计方法,可以在页面中增加活力和美观度。本文将介绍如何利用 JavaScript 实现一个滚动时跟随的右侧浮动层效果。

实现步骤

HTML

在页面中添加一个右侧浮动层的 HTML 结构:

<div class="right-float">
  <!--浮动层内容-->
</div>

CSS

为了让浮动层离屏幕又不影响其他元素布局,我们需要对它进行CSS样式设置:

.right-float {
  position: fixed;
  top: 50%;
  right: 20px;
  transform: translateY(-50%);
}

其中,position: fixed 表示将元素固定在页面可视范围内,不随页面滚动,top: 50% 表示将元素纵向定位在页面可视范围正中央,right: 20px 表示将元素横向定位在页面右侧离边缘 20px 的位置。transform: translateY(-50%) 用于垂直居中元素。当然,你可以根据自己的需要进行位置调整,达到最佳效果。

JavaScript 实现跟随滚动

实现浮动层跟随滚动有两种方法,分别是:

方法一:监听滚动事件

首先,我们需要获取页面滚动距离 scrollTop,然后通过 JavaScript 修改浮动层样式的 top 属性值,使其随滚动而移动。

window.addEventListener('scroll', function() {
  var scroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
  var rightFloat = document.querySelector('.right-float');
  rightFloat.style.top = (50 + scroll) + 'px';
});

其中,window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop 都用于获取页面滚动距离。因为不同浏览器处理方式不一,我们需要分别判断哪个属性可用。通过 querySelector() 方法获取 .right-float 类名的元素,并为其添加滚动事件监听函数,实现跟随滚动。

方法二:利用 CSS Sticky 实现

.right-float {
  position: sticky;
  top: 50%;
  transform: translateY(-50%);
}

CSS Sticky 布局适用于需要滚动的内容。它通过设置元素的 position:stickytop 属性实现元素吸附在屏幕上,直到超过边缘。在我们的右侧浮动层中,设置 position:stickytop:50% 即可实现滚动时自动随着页面滚动。

示例说明

示例一

我们在一篇长文章中添加一个目录导航栏,方便用户阅读。它将呈现在文章右侧,滚动页面时自动跟随。

<div class="article">
  <!--文章内容-->
</div>

<div class="right-float">
  <ul>
    <li><a href="#part1">第一部分</a></li>
    <li><a href="#part2">第二部分</a></li>
    <li><a href="#part3">第三部分</a></li>
  </ul>
</div>

CSS:

.right-float {
  position: sticky;
  top: 50%;
  transform: translateY(-50%);
  width: 200px;
  padding: 20px;
  background-color: #f8f8f8;
  box-shadow: 0 0 10px rgba(0,0,0,0.3);
}

.right-float ul {
  list-style: none;
  margin: 0;
  padding: 0;
}

.right-float li {
  margin: 10px 0;
}

JavaScript:

var rightFloat = document.querySelector('.right-float');
var rightFloatTop = rightFloat.offsetTop;

window.addEventListener('scroll', function() {
  var scroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
  var article = document.querySelector('.article');
  var articleHeight = article.offsetHeight;
  var windowHeight = document.documentElement.clientHeight;
  var scrollEnd = articleHeight - windowHeight;
  if (scroll > rightFloatTop && scroll < scrollEnd) {
    rightFloat.classList.add('fixed');
  } else {
    rightFloat.classList.remove('fixed');
  }
});

这里使用 offsetTop 方法获取 .right-float 相对于文档顶部的距离,判断滑动距离是否在 .article 部分内,是则为其添加 class,位移样式属性跟随滚动。

.fixed {
  position: fixed;
  top: 50%;
}

示例二

我们需要在商品列表页添加一个购物车的快捷入口,用户滚动浏览商品时快速加入购物车。代码实现方法类似:

<div class="product-list">
   <!-- 商品列表 -->
</div>

<div class="right-float">
   <button id="add-to-cart">加入购物车</button>
</div>

CSS:

.right-float {
  position: sticky;
  top: 50%;
  transform: translateY(-50%);
  box-shadow: 0 0 10px rgba(0,0,0,0.3);
}

.right-float button {
  display: block;
  width: 120px;
  height: 40px;
  border: none;
  border-radius: 20px;
  background-color: #fff;
  color: #333;
  box-shadow: 0 0 5px rgba(0,0,0,0.2);
}

JavaScript:

var rightFloat = document.querySelector('.right-float');
var rightFloatTop = rightFloat.offsetTop;

window.addEventListener('scroll', function() {
  var scroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
  var productListTop = document.querySelector('.product-list').offsetTop;
  var productListHeight = document.querySelector('.product-list').offsetHeight;
  var windowHeight = window.innerHeight;
  var scrollEnd = productListTop + productListHeight - windowHeight - 20;
  if (scroll > rightFloatTop && scroll < scrollEnd) {
    rightFloat.classList.add('fixed');
  } else {
    rightFloat.classList.remove('fixed');
  }
});

var addToCart = document.getElementById('add-to-cart');
addToCart.addEventListener('click', function() {
  // 加入购物车逻辑
});

当页面滑动到商品列表时,购物车按钮会出现,点击按钮可执行加入购物车逻辑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js 右侧浮动层效果实现代码(跟随滚动) - Python技术站

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

相关文章

  • CSS实现鼠标移入时图片的放大效果及缓慢过渡效果的示例代码

    实现鼠标移入时图片的放大效果及缓慢过渡效果需要用到CSS的transform和transition属性。以下是具体的步骤: 在HTML中,需要用标签嵌入图片。例如: <img src="example.jpg" alt="example image"> 为这个标签添加CSS样式。首先,需要设置img标签的w…

    css 2023年6月10日
    00
  • js实现动态添加、删除行、onkeyup表格求和示例

    下面是关于js实现动态添加、删除行、onkeyup表格求和的完整攻略。 1. 理解需求及思路 首先需要明确的是,我们要实现的功能主要有三个:动态添加行、动态删除行以及表格数据的求和。基于这些需求,我们可以制定以下的实现思路: 定义一个数组,用于存储表格数据; 使用DOM操作创建表格,并将表格数据导入数组; 为添加按钮绑定事件,以动态添加表格行; 为删除按钮绑…

    css 2023年6月10日
    00
  • html/css基础篇——html代码编写过程中的几个警惕点(必看)

    下面是“html/css基础篇——html代码编写过程中的几个警惕点(必看)”的完整攻略: HTML代码编写过程中的几个警惕点 1. 缩进格式 在编写HTML代码时,我们需要按照一定的缩进格式来区分不同的标签和标签内的内容。这不仅有利于代码的阅读和修改,也可以提高代码的可维护性。 示例: <!DOCTYPE html> <html> …

    css 2023年6月9日
    00
  • 在CSS中定义a:link、a:visited、a:hover、a:active正确顺序

    在CSS中定义链接(a标签)的伪类可以让我们更方便地控制链接在不同状态下的样式。在 CSS 中,链接具有四个伪类:a:link、a:visited、a:hover和 a:active。针对不同的伪类,我们需要设置不同的样式。那么正确的顺序是什么呢?请看下面的攻略: :link 伪类,用于设置链接的初始样式 :visited 伪类,用于设置链接在访问过后的样式…

    css 2023年6月10日
    00
  • CSS教程:了解熟悉css语法

    CSS教程:了解熟悉CSS语法 什么是CSS? CSS(Cascading Style Sheets)是用于描述文档展示样式的语言。它可以用来为HTML、XML(包括SVG和XHTML)等文档添加样式。CSS使得我们可以将样式从内容中抽离出来,让HTML页面结构更简洁明了,同时也可以实现各种各样的视觉效果。 CSS语法的基本结构 CSS语言采用选择器(Sel…

    css 2023年6月9日
    00
  • CSS使用BEM命名规范实践

    下面是“CSS使用BEM命名规范实践”的完整攻略: 什么是BEM命名规范 BEM是块(Block)、元素(Element)、修饰符(Modifier)的缩写。它是一种命名约定,用于在CSS中为代码块、元素和修饰符创建独特的名称。这种命名方式有助于清晰和一致地组织CSS代码。 块(Block):一般独立的功能模块,对应HTML中的一个DOM节点,如.nav、.…

    css 2023年6月9日
    00
  • 里面的div怎么撑开外面的div让高度自适应

    在前端开发中,经常会遇到需要让里面的 div 撑开外面的 div,以便让外面的 div 的高度自适应的情况。本文将提供一些关于如何让里面的 div 撑开外面的 div 的方法,包括使用 CSS 和 JavaScript 的示例说明。 使用 CSS 使用 CSS 让里面的 div 撑开外面的 div 的步骤如下: 确定外面的 div 的高度需要自适应的情况下,…

    css 2023年5月18日
    00
  • 固定、流动、弹性网页布局的利弊分析

    固定、流动、弹性网页布局是网页设计中使用最广泛的几种布局方式。它们各自具有优缺点,需要根据实际的需求选择合适的布局方式。下面我将分别对三种布局方式进行分析。 固定布局 固定布局指的是网页中的元素(比如导航栏、页眉、页脚等)按照固定的尺寸进行布局,不会随着窗口尺寸的变化而改变。固定布局的优点是: 网页元素的位置和尺寸都固定,不会因为用户更改浏览器窗口尺寸而导致…

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