原生js实现公告滚动效果

yizhihongxing

首先我们需要理解什么是公告滚动效果。公告滚动指的是一段文字或图片不断地从右向左(或从下向上)滚动,直至结束。我们通过使用原生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日

相关文章

  • 深入理解css中的margin属性(推荐)

    深入理解CSS中的margin属性 什么是 margin 属性? 在 CSS 中,margin 属性用于设置元素的外边距,即元素和其他元素之间的距离和元素和文档边缘之间的距离。margin 属性有四个方向可以设置值:上方(top)、下方(bottom)、左边(left)和右边(right)。 margin 的属性值 margin 属性可以设置不同类型的属性值…

    css 2023年6月9日
    00
  • vue项目使用CDN引入的配置与易出错点

    Vue是一款流行的前端框架,在项目开发中,会遇到使用CDN引入Vue的需求。本文将介绍在Vue项目中使用CDN引入的配置与易出错点,以及应对方法。 CDN引入Vue的步骤 使用CDN引入Vue,可以避免每次都下载Vue的包,在页面加载速度上有一定的优势。下面是具体的步骤: 在html文件中引入Vue的CDN地址。通常放在<head>标签中。 &l…

    css 2023年6月9日
    00
  • jQuery基本选择器选择元素使用介绍

    jQuery基本选择器选择元素使用介绍 什么是jQuery选择器 jQuery选择器是一种用于查找HTML元素及操作其内容的标准功能。通过jQuery选择器,我们可以通过某种方式来选取HTML中的元素,从而进行操作。 常用的基本选择器 jQuery提供了多种基本选择器,以下是一些常用的: 元素选择器:通过元素名称来选取元素,例如$(“p”)表示选取所有&lt…

    css 2023年6月10日
    00
  • 2019腾讯暑期实习面试(offer)前端经验

    2019腾讯暑期实习前端经验攻略 一、准备阶段 熟悉面试流程和常见问题:腾讯的前端面试一般包括以下环节:自我介绍、技术问题、项目经验、算法题目等。在准备阶段,需要认真思考自己的经历,总结符合岗位需求的项目经验,预习算法和数据结构的基本知识。同时,可以查询和分析往年的招聘信息和面试体验,了解面试官可能提出的问题。 提前评估自身水平:对于前端开发而言,需要重点掌…

    css 2023年6月9日
    00
  • js+css实现三级导航菜单

    以下是详细的js+css实现三级导航菜单的攻略: 1. 先决条件 在开始之前,你需要具备以下技能: HTML 基础 CSS 基础 JavaScript 基础 2. HTML 结构 我们首先需要在 HTML 中构建出三级导航菜单的基本结构。结构如下: <nav> <ul> <li><a href="#&quo…

    css 2023年6月10日
    00
  • 第一次接触神奇的Bootstrap菜单和导航

    下面是详细讲解“第一次接触神奇的Bootstrap菜单和导航”的完整攻略。 什么是Bootstrap菜单和导航 Bootstrap是一个流行的前端CSS框架,它提供了一系列的组件,方便开发者们快速搭建网站,其中菜单和导航是非常重要的组件之一。Bootstrap的菜单和导航可以帮助用户快速浏览和定位网站内容,同时也能增加网站的美观性。 如何使用Bootstra…

    css 2023年6月11日
    00
  • vue 图片路径 “@/assets“ 报错问题及解决

    针对 “vue图片路径 @/assets 报错问题” 进行一下详细的讲解和解决攻略。 问题描述 在使用 Vue 开发中,当需要引入项目中的图片时,可能会遇到以下的报错: ./src/views/Home.vue Module not found: Error: Can’t resolve ‘@/assets/images/name.png’ in ‘D:\p…

    css 2023年6月10日
    00
  • 容易忽略的CSS特性

    容易忽略的CSS特性 在CSS中,有一些特性很容易被忽略,但它们对于网页的设计和开发非常重要。本攻略将详细讲解这些容易忽略的CSS特性,包括基本原理、使用方法和示例说明。 1. text-transform text-transform属性用于控制文本的大小写。它可以接受以下值: none:默认值,不改变文本大小写。 capitalize:将每个单词的首字母…

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