JS实现的N多简单无缝滚动代码(包含图文效果)

下面我为你详细讲解如何实现JS的无缝滚动代码。

一、准备工作

在开始之前,我们需要准备以下材料:

  1. 一份文本编辑器,比如Sublime Text、VSCode等等;
  2. 用于展示滚动效果的HTML页面;
  3. JS代码文件。

二、步骤分解

下面我们将这个过程分解成几个步骤:

1.创建HTML页面

首先,我们需要创建一个HTML页面,用于展示我们的滚动效果。我们可以在页面中添加一些文本或图片,如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>无缝滚动示例</title>
</head>
<body>
    <div id="wrap">
        <div id="main">
            <img src="http://placehold.it/400x200&text=1" alt="">
            <img src="http://placehold.it/400x200&text=2" alt="">
            <img src="http://placehold.it/400x200&text=3" alt="">
            <img src="http://placehold.it/400x200&text=4" alt="">
            <img src="http://placehold.it/400x200&text=5" alt="">
        </div>
    </div>
</body>
</html>

如上,我们在页面中包含了一个id为wrap的div和一个id为main的div,其中id为wrap的div用于实现边框和布局,id为main的div是我们实现滚动效果的主要容器,其中包含了若干个img标签,用于展示图片。

2.样式设置

接下来我们需要设置一些样式,让页面的显示更加美观。我们可以在head标签中添加一些CSS代码,如下所示:

<style type="text/css">
    #wrap {
        width: 400px;
        height: 250px;
        margin: 0 auto;
        border: 1px solid #ccc;
        overflow: hidden;
    }
    #main {
        width: 1250px;
        position: relative;
    }
    #main img {
        float: left;
    }
</style>

如上所示,我们对wrap和main分别设置了宽高、边框、位置和滚动相关的样式,对img则进行了浮动设置。

3.编写JS代码

接下来,我们需要编写JS代码来实现无缝滚动的效果。我们可以在页面中添加以下代码:

<script type="text/javascript">
    var timer = setInterval(autoPlay, 3000);

    function autoPlay(){
        if(parseInt(document.getElementById('main').style.left) % -400 > 0){
            var l = parseInt(document.getElementById('main').style.left) - parseInt(document.getElementById('main').style.left) % 400 - 400;
        }else{
            var l = parseInt(document.getElementById('main').style.left) - parseInt(document.getElementById('main').style.left) % 400;
        }
        animate(l);
    }

    function animate(offset){
        var time = 300;          //位移总时间
        var interval = 10;          //位移间隔时间
        var speed = offset/(time/interval);          //每次位移量

        var targetLeft = parseInt(document.getElementById('main').style.left) + offset;

        function go(){
            if((speed > 0 && parseInt(document.getElementById('main').style.left) < targetLeft) || (speed < 0 && parseInt(document.getElementById('main').style.left) > targetLeft)) {
                document.getElementById('main').style.left = parseInt(document.getElementById('main').style.left) + speed + 'px';
                setTimeout(go, interval);
            }else {
                document.getElementById('main').style.left = targetLeft + 'px';
                if(targetLeft > -200) {
                    document.getElementById('main').style.left = -1000 + 'px';
                }
                if(targetLeft < -1000) {
                    document.getElementById('main').style.left = '-200px';
                }
            }
        }
        go();
    }

    window.onload = function(){
        document.getElementById('main').onmouseover = function(){
            clearInterval(timer);
        }
        document.getElementById('main').onmouseout = function(){
            timer = setInterval(autoPlay, 3000);
        }
    }
</script>

如上代码所示,我们定义了一个定时器,在定时器中调用animate()函数来实现无缝滚动效果。animate()函数中,我们使用了setTimeout()方法来模拟位移,从而实现动画效果。

4.完整代码

最后,我们需要将上述代码整合成一个完整的HTML文件,并在浏览器中预览效果。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>无缝滚动示例</title>
    <style type="text/css">
        #wrap {
            width: 400px;
            height: 250px;
            margin: 0 auto;
            border: 1px solid #ccc;
            overflow: hidden;
        }
        #main {
            width: 1250px;
            position: relative;
        }
        #main img {
            float: left;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <div id="main">
            <img src="http://placehold.it/400x200&text=1" alt="">
            <img src="http://placehold.it/400x200&text=2" alt="">
            <img src="http://placehold.it/400x200&text=3" alt="">
            <img src="http://placehold.it/400x200&text=4" alt="">
            <img src="http://placehold.it/400x200&text=5" alt="">
        </div>
    </div>

    <script type="text/javascript">
        var timer = setInterval(autoPlay, 3000);

        function autoPlay(){
            if(parseInt(document.getElementById('main').style.left) % -400 > 0){
                var l = parseInt(document.getElementById('main').style.left) - parseInt(document.getElementById('main').style.left) % 400 - 400;
            }else{
                var l = parseInt(document.getElementById('main').style.left) - parseInt(document.getElementById('main').style.left) % 400;
            }
            animate(l);
        }

        function animate(offset){
            var time = 300;          //位移总时间
            var interval = 10;          //位移间隔时间
            var speed = offset/(time/interval);          //每次位移量

            var targetLeft = parseInt(document.getElementById('main').style.left) + offset;

            function go(){
                if((speed > 0 && parseInt(document.getElementById('main').style.left) < targetLeft) || (speed < 0 && parseInt(document.getElementById('main').style.left) > targetLeft)) {
                    document.getElementById('main').style.left = parseInt(document.getElementById('main').style.left) + speed + 'px';
                    setTimeout(go, interval);
                }else {
                    document.getElementById('main').style.left = targetLeft + 'px';
                    if(targetLeft > -200) {
                        document.getElementById('main').style.left = -1000 + 'px';
                    }
                    if(targetLeft < -1000) {
                        document.getElementById('main').style.left = '-200px';
                    }
                }
            }
            go();
        }

        window.onload = function(){
            document.getElementById('main').onmouseover = function(){
                clearInterval(timer);
            }
            document.getElementById('main').onmouseout = function(){
                timer = setInterval(autoPlay, 3000);
            }
        }
    </script>
</body>
</html>

三、示例说明

以上是一个比较基础的无缝滚动示例,如果想要定制更加丰富的滚动效果,可以根据需求对样式和JS代码进行调整。

下面是另一个示例,展示了如何在列表中滚动展示文本内容:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>无缝滚动示例2</title>
    <style type="text/css">
        #wrap {
            width: 400px;
            height: 250px;
            margin: 0 auto;
            border: 1px solid #ccc;
            overflow: hidden;
            position: relative;
        }
        #list {
            position: absolute;
            left: 0;
            top: 0;
            height: 100%;
        }
        #list li {
            width: 400px;
            height: 250px;
            display: none;
            position: absolute;
            left: 0;
            top: 0;
            z-index: 1;
        }
        #list li:first-child {
            display: block;
        }
        #list li p {
            margin: 0;
            padding: 20px;
            font-size: 20px;
            color: #fff;
            background-color: rgba(0,0,0,0.5);
        }
        #page {
            position: absolute;
            right: 20px;
            bottom: 0;
            font-size: 0;
            z-index: 2;
        }
        #page span {
            display: inline-block;
            width: 10px;
            height: 10px;
            margin: 0 5px;
            border-radius: 50%;
            background-color: #ccc;
            cursor: pointer;
        }
        #page span.active {
            background-color: #333;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <ul id="list">
            <li><p>这是一条测试文本1</p></li>
            <li><p>这是一条测试文本2</p></li>
            <li><p>这是一条测试文本3</p></li>
            <li><p>这是一条测试文本4</p></li>
            <li><p>这是一条测试文本5</p></li>
        </ul>
        <div id="page">
            <span class="active"></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>
    </div>

    <script type="text/javascript">
        var index = 0;
        var timer = setInterval(autoPlay, 3000);
        var liList = document.getElementById('list').getElementsByTagName('li');
        var spanList = document.getElementById('page').getElementsByTagName('span');

        function autoPlay(){
            index++;
            index = index >= liList.length ? 0 : index;
            changeImg(index);
        }

        function changeImg(curIndex){
            for(var i = 0; i < liList.length; i++){
                liList[i].style.display = 'none';
                spanList[i].className = '';
            }
            liList[curIndex].style.display = 'block';
            spanList[curIndex].className = 'active';
        }

        for(var i = 0; i < spanList.length; i++) {
            spanList[i].index = i;
            spanList[i].onclick = function() {
                clearInterval(timer);
                index = this.index;
                changeImg(index);
                timer = setInterval(autoPlay, 3000);
            }
            document.getElementById('wrap').onmouseover = function(){
                clearInterval(timer);
            }
            document.getElementById('wrap').onmouseout = function(){
                timer = setInterval(autoPlay, 3000);
            }
        }
    </script>
</body>
</html>

如上所示,我们使用了一些CSS样式来实现文本内容的滚动效果,并在列表下方添加了几个圆点按钮,用于用户手动切换显示的文本内容。同时,我们也对JS代码进行了一些改动,使其符合我们的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS实现的N多简单无缝滚动代码(包含图文效果) - Python技术站

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

相关文章

  • 清理无用的CSS样式比较有用的几个工具

    清理无用的CSS样式是优化网站性能的一个重要步骤之一。下面是使用比较有用的工具来清理无用的CSS样式的攻略,主要分为以下两个步骤: 第一步:查找无用的CSS 查找无用的CSS有多种方法,比如手动查找、使用浏览器开发者工具等。但是手动查找会十分麻烦、费时,并且容易漏掉一些细节,因此推荐使用一些工具来自动化查找无用的CSS。下面介绍几个比较有用的工具。 1.1 …

    css 2023年6月9日
    00
  • css背景和边框标签实例详解

    CSS背景和边框标签实例详解 介绍 CSS样式表是网页布局过程中必不可少的一部分。其中,CSS背景和边框标签是用来定义网页背景和边框的样式。 背景标签 background-color background-color是用来定义网页背景颜色的。其语法如下: background-color: color; 其中,color可以是CSS颜色名称、十六进制颜色码…

    css 2023年6月9日
    00
  • HTML的10个表格相关标记

    下面就给您详细讲解一下“HTML的10个表格相关标记”的攻略。 1. <table> 标签 <table> 标签用于创建表格。在 <table> 标签中,可以使用 <tr> 标签表示表格行,使用 <td> 标签表示表格中的单元格。 示例: <table> <tr> <t…

    css 2023年6月10日
    00
  • JQuery each()函数如何优化循环DOM结构的性能

    当我们需要循环遍历某个DOM集合时,可以使用each()函数来实现。但随着DOM元素的数量增加,each()函数的运行效率会逐步降低,我们可以通过以下几种方法优化循环DOM结构的性能。 1. 减少搜索次数 在each()函数内使用选择器搜索DOM元素时,每次搜索都需要消耗一定的资源。为了避免不必要的搜索,可以先将DOM元素存储到一个变量中,然后再操作该变量。…

    css 2023年6月9日
    00
  • iframe去边框、无边框使用大全(实践经验整理)

    iframe去边框、无边框使用大全(实践经验整理) 去边框 方法一:使用CSS样式去除边框 <iframe src="https://www.example.com" style="border:none;"></iframe> 使用样式border:none可以去除iframe的边框。 方法二…

    css 2023年6月10日
    00
  • 使用vue的transition完成滑动过渡的示例代码

    使用vue的transition可以实现页面元素的过渡动画,如做一个图片的滑动过渡效果,下面就详细说明下使用vue的transition完成滑动过渡的示例代码。 我们假设现在有一个页面中需要实现一个图片的滑动过渡效果,这个滑动过渡效果需要实现图片从左往右滑动,同时有淡入淡出的效果。 首先需要在template模板中编写transition标签,如下所示: &…

    css 2023年6月10日
    00
  • CSS实现带遮罩层可关闭的弹窗效果

    下面是针对“CSS实现带遮罩层可关闭的弹窗效果”的完整攻略: 1. HTML 结构 弹窗需要在 HTML 中先定义结构,可以使用一个 div 元素包裹弹窗内容。如下: <div id="popup"> <h2>这是弹窗标题</h2> <p>这是弹窗内容</p> <butto…

    css 2023年6月10日
    00
  • CSS3 伪类选择器 nth-child()说明

    CSS3 的伪类选择器之一是nth-child(),其作用是筛选出一组兄弟元素中,特定位置的那一个。 语法说明 对某个元素所进行的选取规则为: :nth-child([<an+b>]) 解释如下: n表示从等差数列的第一个数开始,共有多少个数,从0开始计算。 an+b表示等差数列的公式,其中a和b为自然数,且满足条件0 ≤ b < a。 用…

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