DIV+CSS+JS不间断横向滚动实现代码

DIV+CSS+JS不间断横向滚动实现代码的攻略分为以下几个步骤:

HTML布局

首先需要使用div标签创建一个包含所有滚动内容的容器,并设置样式overflow: hidden;,让容器内容不可见。

<div class="scroll-container">
  <div class="scroll-content">
    <!-- 滚动内容 -->
  </div>
</div>

其中,.scroll-container容器使用overflow: hidden;样式隐藏滚动内容的溢出部分,.scroll-content则是包含实际的滚动内容的容器。

CSS样式

现在,需要在.scroll-content容器中设置一些CSS样式,以使其能够横向滚动。首先需要将所有滚动内容依次排列在一行上,同时设置宽度为所有内容的宽度之和。然后再使用display: inline-block;样式将容器内容变成一行,即使内容超出容器宽度,也不会自动折行。最后,使用animation样式实现滚动效果。

.scroll-content {
  white-space: nowrap; /* 横向不自动换行 */
  width: 8000px; /* 所有内容宽度之和 */
  display: inline-block; /* 变成一行 */
  animation: scroll 60s linear infinite; /* 滚动效果 */
}

@keyframes scroll {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-8000px); } /* 容器宽度 */
}

其中,animation样式用于设置动画效果,scroll则是动画名称,在@keyframes语句中进行定义。keyframes中设置了动画启始和结束时的CSS属性值,使用transform: translateX()实现横向移动效果。

JS实现

最后,需要使用JS获取.scroll-content容器的宽度,并将其赋值给width属性,实现在任何情况下都能自适应滚动内容容器的宽度。

window.onload = function() {
  var contentWidth = document.querySelector('.scroll-content').offsetWidth;
  document.styleSheets[0].addRule('.scroll-content', 'width: ' + contentWidth + 'px');
}

在JS代码中,使用了querySelector方法来获取容器宽度,添加了offsetWidth属性,可以获取元素实际渲染的宽度,而不仅仅是CSS宽度。然后将宽度值生成一个动态CSS规则,实现了滚动容器自适应宽度。

示例说明

下面,提供两个示例说明:

示例一

实现一个基本的横向滚动效果,滚动内容为一组较长的文本。

<div class="scroll-container">
  <div class="scroll-content">
    <p class="scroll-item">这是一段很长很长的文本,需要使用滚动展示,不然内容会超出容器范围</p>
    <p class="scroll-item">这是一段很长很长的文本,需要使用滚动展示,不然内容会超出容器范围</p>
    <p class="scroll-item">这是一段很长很长的文本,需要使用滚动展示,不然内容会超出容器范围</p>
  </div>
</div>
.scroll-content {
  white-space: nowrap; /* 横向不自动换行 */
  width: 8000px; /* 所有内容宽度之和 */
  display: inline-block; /* 变成一行 */
  animation: scroll 60s linear infinite; /* 滚动效果 */
}

@keyframes scroll {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-8000px); } /* 容器宽度 */
}
window.onload = function() {
  var contentWidth = document.querySelector('.scroll-content').offsetWidth;
  document.styleSheets[0].addRule('.scroll-content', 'width: ' + contentWidth + 'px');
}

示例二

实现一个无限滚动的图片轮播效果,所有图片的宽度一致。

<div class="scroll-container">
  <div class="scroll-content">
    <img src="img1.jpg" alt="图片一" class="scroll-item"> 
    <img src="img2.jpg" alt="图片二" class="scroll-item"> 
    <img src="img3.jpg" alt="图片三" class="scroll-item"> 
    <img src="img4.jpg" alt="图片四" class="scroll-item"> 
    <img src="img5.jpg" alt="图片五" class="scroll-item"> 
  </div>
</div>
.scroll-content {
  white-space: nowrap; /* 横向不自动换行 */
  width: 5000px; /* 所有内容宽度之和 */
  display: inline-block; /* 变成一行 */
  animation: scroll 10s linear infinite; /* 滚动效果 */
}

.slide { /* 图片宽度和容器宽度一致 */
  width: 400px;
  height: 300px;
}

@keyframes scroll {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-2000px); }
}
window.onload = function() {
  var contentWidth = document.querySelector('.scroll-content').offsetWidth;
  var itemWidth = document.querySelector('.scroll-content > img').offsetWidth;
  var numItems = contentWidth / itemWidth;

  // 将所有图片复制一份,用来实现无缝滚动效果
  for (var i = 0; i < numItems; i++) {
    var itemClone = document.querySelector('.scroll-content > img').cloneNode(true);
    document.querySelector('.scroll-content').appendChild(itemClone);
  }
  // 调整总宽度
  document.styleSheets[0].addRule('.scroll-content', 'width: ' + (contentWidth * 2) + 'px');
}

在这个示例中,需要使用JS实现图片无限滚动的效果。因此,首先需要通过JS代码复制所有的图片,将其拼接在原有图片后面,生成一份完整的图片列表。然后,使用JS代码计算所需宽度并调整容器宽度,以实现无限滚动效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:DIV+CSS+JS不间断横向滚动实现代码 - Python技术站

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

相关文章

  • jquery实现的鼠标拖动排序Li或Table

    这里是一份完整的攻略来讲解如何使用jQuery实现鼠标拖动排序li或table,并提供了两个示例说明。 第1步:引入jQuery库文件 在文档的head标签中引入jQuery库文件。 <head> <script src="https://code.jquery.com/jquery-3.5.1.min.js">&…

    css 2023年6月10日
    00
  • Firefox专属hack的写法介绍

    在网页开发中,由于不同浏览器的兼容性问题,我们可能需要使用一些 hack 的写法来解决问题。本文将提供一些 Firefox 专属 hack 的写法介绍,包括使用 @-moz-document 和 -moz-appearance 属性的示例说明。 使用 @-moz-document 可以使用 @-moz-document 来针对 Firefox 浏览器进行样式…

    css 2023年5月18日
    00
  • vue中解决拖拽改变存在iframe的div大小时卡顿问题

    解决vue中拖拽iframe的div卡顿问题的技术方案如下: 技术方案概述 在Vue中,当页面包含iframe时,拖拽改变div大小容易出现卡顿现象,主要原因是iframe使用了iframe父元素的样式,而改变div大小会引起iframe内部大小的变化,从而导致性能问题。为了解决这个问题,可以使用Vue的ref属性和ResizeObserver对象来实现动态…

    css 2023年6月10日
    00
  • 纯CSS实现聊天框小尖角、气泡效果

    让我们来讲解如何用纯CSS实现聊天框小尖角和气泡效果。整个过程可以分为以下几步: 创建一个聊天框容器:我们可以使用一个div元素作为聊天框的容器,并设置它的宽度、高度、背景颜色、边框等属性。 <div class="chat-box"> <p>This is a message!</p> </di…

    css 2023年6月9日
    00
  • 微信小程序vant弹窗组件的实现方式

    关于微信小程序vant弹窗组件的实现方式,我给出以下完整攻略: 简介 vant是一款基于Vue.js的移动端组件库,在微信小程序中也可以使用,其中,vant提供了一些常用的弹窗组件供我们使用。 实现方式 在使用vant中的弹窗组件时,需先引入vant组件库: import "@vant/weapp/dist/toast/toast"; i…

    css 2023年6月10日
    00
  • css3 实现元素弧线运动的示例代码

    实现元素弧线运动的示例代码需要使用到 CSS3 的 animation 和 transform 属性,下面是实现步骤: 1. 确定元素 首先需要确定需要进行弧线运动的元素,例如这里选择使用 div 元素作为样例: <div class="arc"></div> 2. 定义样式 接下来需要定义元素的样式,可以将该元素…

    css 2023年6月10日
    00
  • css3中flex布局宽度不生效的解决

    当使用CSS3中的Flex布局时,有时候会出现宽度不生效的情况。这种情况通常是由于Flex容器或Flex项目没有正确设置尺寸导致的。下面是解决这个问题的详细攻略。 步骤一:设置Flex容器的宽度 要正确使用Flex布局,必须在容器上设置display: flex。除此之外,还需要设置flex-direction(排列方向,默认为row)、justify-co…

    css 2023年6月10日
    00
  • 多class应用同一个元素时前后声明的class规则将会怎样

    当一个元素应用多个 class 时,前后声明的 class 规则将会按照声明的顺序依次应用到该元素上。如果多个 class 中存在相同的属性,后声明的 class 中的属性将会覆盖前面声明的 class 中的属性。下面是两个示例说明: 示例一:前后声明的 class 规则 <div class="box box1"></…

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