美文网首页
跑马灯JS文字轮播效果实现

跑马灯JS文字轮播效果实现

作者: JJesson | 来源:发表于2019-01-21 10:56 被阅读0次

笔者介绍:13级毕业生,目前毕业一年,前就职地点北京,任职一年。前端小菜鸟吧,前一家公司是个创业小公司,毕业时做的是python 后端开发,由于前端人员紧张,后来主要参与前端页面开发。之前做过农业方面数据分析数据清洗,农页数据可视化,CMS系统开发。现在长沙,主要负责Web开发,H5页面,小程序等前端工作

目前技术能力:一直在努力学习JS面向对象开发,Vue.js相关技术栈,Webpack打包工具,小程序开发,H5移动端页面开发

不骄不躁吧,一步一个脚印,趁这段时间好好总结,好好沉淀


好,废话不多说,进入正题吧


跑马灯效果JS文字轮播效果实现

实现思路:
  • css scrollTop属性可以控制元素的被隐藏在内容区域上方的像素。
  • 在父级元素小于子元素的时候可以使用这个属性
  • 复制一个元素实现跑马灯循环效果(从下往上循环跑动)
  • 利用js定时器实现动画,当scrollTop等于子元素高度时,scrollTop设置为0

  • 代码实现:

html:

    <div class = 'testScroll' id="scrollBlock"> 
        <ul class="scrollItem" id="contentBlock">
            <li> 跑马灯</li>
        </ul>
    </div>

css:

设置子元素比父元素稍微高一点点,父元素overflow:hidden可以实现隐藏效果

        ul li{
            list-style: none;
        }
        body{
            background-color: #f3f3f3
        }
        .testScroll{
            overflow: hidden;
            height: 4rem;
            background-color: #fff;
        }
        #contentBlock{
            margin-top: 0;
            margin-bottom: 0;
            
            height: 101%;
        }

JS:

function zMarquee(parentDom,childDom,speedParam,stayTime){
            if(parentDom && childDom){
                var parent = document.getElementById(parentDom);
                var child = document.getElementById(childDom);
                var childHeight = child.offsetHeight;   //跑马灯内容高度
                var speed = speedParam?speedParam:40;   //跑马灯速度
                var timer = null;   
                var delay = stayTime?stayTime:1000; //默认到底保持时间
                parent.scrollTop = 1;
                parent.innerHTML += parent.innerHTML;
                var start_scroll = function(){
                    timer = setInterval(scrollUp,speed);
                    parent.scrollTop++;
                }
                var scrollUp = function(){
                    if(Math.round(parent.scrollTop)%(childHeight*2)==0){
                        clearInterval(timer);
                        setTimeout(start_scroll,10);
                        parent.scrollTop = parent.scrollTop + 1;
                    }else{
                        if(parent.scrollTop >= childHeight){
                            parent.scrollTop = 0;
                        }
                        parent.scrollTop++;

                    }
                                    
                }
                if(parent.offsetHeight < childHeight){
                    start_scroll()
                }else{
                    console.error("zMarquee throw a error ,parentDom's height is more than childDom's ")
                }

            }else{
                console.error('zMarquee Param illegal !')
            }
        }
        zMarquee('scrollBlock','contentBlock',20)

代码比较简单,简单的封装了一个方法,参数为父元素和子元素的ID,可选参数为speed,效果还不错,其他方法可以继续丰富

github地址

相关文章

网友评论

      本文标题:跑马灯JS文字轮播效果实现

      本文链接:https://www.haomeiwen.com/subject/zvigdqtx.html