原生js实现公告滚动效果

首先我们需要理解什么是公告滚动效果。公告滚动指的是一段文字或图片不断地从右向左(或从下向上)滚动,直至结束。我们通过使用原生js,可以很轻松地实现这一效果。

下面是具体的实现过程说明:

一、HTML结构

在HTML中,我们需要设置一个容器div来包裹所有要滚动的元素。这个容器需要设置合适的宽度和高度,并且需要设置overflow:hidden属性来控制滚动元素的显示部分。

具体示例代码如下:

<div class="scroll-container">
    <ul class="scroll-content">
        <li>这是第1条公告</li>
        <li>这是第2条公告</li>
        <li>这是第3条公告</li>
        <li>这是第4条公告</li>
    </ul>
</div>

二、CSS样式

在CSS中,需要对容器和滚动元素进行样式设置。容器需要设置合适的宽度和高度,并且需要设置overflow:hidden属性;滚动元素需要设置float:left或display:inline-block让其变成单行横向排列。

具体示例代码如下:

.scroll-container {
   width: 300px;
   height: 100px;
   overflow: hidden;
}
.scroll-content {
   float: left;
   list-style: none;
   margin: 0;
   padding: 0;
}
.scroll-content li {
   display: inline-block;
   margin-right: 20px;
}

三、JavaScript逻辑

在JavaScript中,我们需要对滚动元素进行无缝滚动,并且需要通过setTimeout函数实现延时效果,让滚动公告不断地向左滚动,直至结束。

具体示例代码如下:

function Marquee() {
   var container = document.querySelector(".scroll-container");
   var content = document.querySelector(".scroll-content");
   var child = content.children;
   var firstChild = child[0];
   var width = firstChild.offsetWidth + 20;
   var speed = 50; // 滚动速度
   var left = 0;
   setTimeout(function() {
       content.appendChild(firstChild);
       content.style.left = -width + "px";
   }, 0);
   setInterval(function() {
       left += 1;
       content.style.left = -left + "px";
       if (left == width) {
           left = 0;
           content.appendChild(content.children[0]);
           content.style.left = -left + "px";
       }
   }, speed);
}
Marquee();

上述代码中,我们通过querySelector的方法获取容器和滚动元素,计算出容器的宽度以及滚动速度,然后通过setTimeout函数实现自动滚动效果,采用setInterval函数不断地更新left值以及滚动元素的位置。同时,我们通过appendChild和style.left设置元素的位置与内容。

以上是一种比较常见的原生js实现公告滚动效果的攻略,下面是另外一种实现方式的示例。

示例1:利用CSS3实现公告滚动

在本示例中,我们采用了CSS3的transition动画属性,实现了公告向左滚动的效果。CSS3的transition是一种可以让元素在一段时间内从一个状态平滑过渡到另一个状态的动画效果。

具体示例代码如下:

<div class="scroll-container" onmouseover="stopRoll()" onmouseout="startRoll()">
   <div class="scroll-content">
       <div class="scroll-item">公告1</div>
       <div class="scroll-item">公告2</div>
       <div class="scroll-item">公告3</div>
       <div class="scroll-item">公告4</div>
       <div class="scroll-item">公告5</div>
   </div>
</div>
.scroll-container {
   width:400px;
   height:25px;
   overflow:hidden;
}
.scroll-content {
   display: flex;
   width:max-content;
   white-space: nowrap;
   transition:transform 0.5s linear;
}
.scroll-item{
   margin-right:20px; 
}
function startRoll(){
   var container = document.querySelector('.scroll-container');
   var content = document.querySelector('.scroll-content');
   var item = document.querySelector('.scroll-item');
   scroll = window.setInterval(function(){
       content.appendChild(item);
       content.style.transform = 'translateX(-' + getComputedStyle(content).width + ')';
   }, 3000);
}

function stopRoll(){
   window.clearInterval(scroll);
}
startRoll();

在此示例中,我们首先通过querySelector方法获取容器和滚动元素,使用flex布局以及white-space属性使元素能够在容器上水平排列,通过transition属性控制元素的动画效果。最后通过setInterval函数和transform属性实现自动滚动效果。

示例2:利用jQuery实现公告滚动

在此示例中,我们利用了jQuery库中的animate函数,并且将公告动态生成在DOM树中。

具体示例代码如下:

<div class="scroll-container">
    <ul class="scroll-content"></ul>
</div>
.scroll-container {
   width: 300px;
   height: 100px;
   overflow: hidden;
}
.scroll-content {
   float: left;
   list-style: none;
   margin: 0;
   padding: 0;
}
.scroll-content li {
   display: inline-block;
   margin-right: 20px;
}
var index = 0;
function newScroll(str) {
   var li = "<li>" + str + "</li>";
   $('.scroll-content').append(li);
   index++;
}
function Marquee() {
   var speed = 50;
   var container = $(".scroll-container");
   var content = $(".scroll-content");
   var firstChild = content.children().eq(0);
   var width = firstChild.width() + 20;
   var left = width;
   var len = content.children().length;
   setInterval(function() {
       if (index != 0) {
           newScroll("这是第" + (index + 1) + "条公告");
       }
       left--;
       if (left < -width) {
           content.children().eq(0).remove();
           left += width;
           len--;
           if (len < 4) {
               newScroll("这是第" + (index + 1) + "条公告");
           }
       }
       content.css("left", left + "px");
   }, speed);
}
Marquee();

在本示例中,我们使用jQuery库的append函数将新的公告内容动态添加到DOM树中,并通过eq函数和remove函数控制元素的数量,通过animate函数控制元素的动画效果,完成整个滚动的过程。

综上所述,以上是两个使用原生js和一个使用jQuery库实现公告滚动效果的示例。通过理解这些示例,我们可以了解到不同的实现方式,掌握一些常用的滚动特效技巧,同时可以根据需求自定义代码,实现不同的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现公告滚动效果 - Python技术站

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

相关文章

  • JavaScript实现图片本地预览功能【不用上传至服务器】

    JavaScript实现图片本地预览功能,不用上传至服务器,可以通过以下几个步骤实现: HTML代码: 在HTML代码中添加<input>标签,用于选择图片文件,并监听其中的change事件,代码如下: <!– 选择图片文件 –> <input type="file" onchange="han…

    css 2023年6月11日
    00
  • 基于vue实现一个禅道主页拖拽效果

    让我详细讲解”基于Vue实现一个禅道主页拖拽效果”的攻略。 一、需求分析 在进行编码之前,首先要进行需求分析,明确我们要实现的功能以及需要使用的技术和工具,以下是对此项目的需求分析: 实现将禅道主页的各个模块进行拖拽排序功能 使用Vue.js作为项目的主要技术栈 使用HTML5 Drag and Drop API实现拖拽功能 使用Lodash库来辅助数据操作…

    css 2023年6月9日
    00
  • Bootstrap CSS组件之导航条(navbar)

    Bootstrap CSS组件之导航条(navbar)是Bootstrap中常用的组件之一,它能够帮助我们在网页顶部或底部添加导航菜单,使得网站导航更加方便和美观。下面我将详细讲解如何在网页中使用Bootstrap CSS导航条组件。 1. 引入Bootstrap CSS 首先,我们需要在HTML文档中引入Bootstrap CSS样式文件,可以通过CDN引…

    css 2023年6月10日
    00
  • CSS中下拉菜单和表单以及弹出层的简单笔记

    当涉及到网站的用户体验时,下拉菜单、表单和弹出层是非常重要的元素。在CSS中,我们可以使用不同的技术和属性来创建这些元素。 下拉菜单 下拉菜单是一种常见的界面元素,它可以让用户轻松地选择选项。在HTML中,我们可以使用<select>元素创建下拉菜单。在CSS中,我们可以使用select选择器和伪类选择器来样式化下拉菜单。 样式化下拉菜单 要样式…

    css 2023年6月10日
    00
  • CSS深入教程之带你认识不一样的渐变

    CSS深入教程之带你认识不一样的渐变:完整攻略 背景 渐变是Web界面中非常常用的一种样式,它可以在一个范围内平滑地呈现过渡效果,使得视觉效果更加生动、多样化。CSS3提供了多种渐变的方式,比如线性渐变(linear-gradient)、径向渐变(radial-gradient)、重复渐变(repeating-linear-gradient)等等,但是这些方…

    css 2023年6月11日
    00
  • CSS 定位之position全面了解

    CSS 定位之 position 全面了解 什么是 position 在 CSS 中,position 属性用来控制一个元素在文档中的定位方式。常见的 position 属性值有 static、relative、absolute、fixed 和 sticky。 position 属性值 static static 是 position 属性的默认值。它表示元…

    css 2023年6月9日
    00
  • 如何解决外边距margin叠加的问题探讨

    下面是“如何解决外边距margin叠加的问题探讨”的完整攻略。 问题探讨 外边距margin叠加是指当两个相邻的元素具有相同的方向的外边距时,会出现两个边框之间外边距的加合大于单个边框的情况。 例如,当两个垂直方向相邻的元素分别具有30px和50px的外边距时,它们之间的外边距为50px,而不是30px+50px=80px。 这种现象在页面布局中经常会出现,…

    css 2023年6月10日
    00
  • 通过CSS实现逼真水滴动效

    以下是详细讲解“通过CSS实现逼真水滴动效”的完整攻略。 一、分析水滴动效的实现原理 在进行实现之前,我们需要明确水滴动效的实现原理,只有了解了实现原理,才能更好地进行实现。水滴动效主要包括两个部分:水滴自身的形状和水滴的运动轨迹。 1.1 水滴形状 水滴形状是通过CSS3的border-radius属性实现的。我们可以设置一个圆形的div,然后通过设置bo…

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