我们今天要实现的是字体上下无缝滚动的效果。 在友情链接部分,2345提供了大量的链接,并通过定时无缝滚动让内容在窗口中显示。 这里我也记下这个函数。 当页面加载时,链接在输入时自动无缝向上滚动,当鼠标悬停在其上时滚动停止。
首先我们来实现字幕的滚动效果。 一般如果有多个单条数据滚动html滚动条代码,比较简单的方法是使用css实现滚动。 通过动画和@keyframes的配合可以快速实现滚动,但是这时候就会出现问题。 问题是滚动到最后一条的时候会自动跳到第一条,中间会有空隙,所以用这个方法的时候最好把第一条数据复制过来放最后,然后通过 animation-fill-mode: forwards; 动画重置为第一帧,以便可以无缝滚动。
.linkContent { width: 90%; height: 20px; animation: move 3s infinite 2s running; animation-fill-mode: forwards; } @keyframes move { 0% { transform:translatey(0px); } 100% { transform:translateY(-20px); } }
这里我的数据是通过p标签遍历a标签得到的,所以每一行有很多个a标签,具体个数和内容的长度有关,所以复制第一个是不可能的,所以这个方法是不适合我这里使用,所以这里就用js来实现吧。 为了更好的获取元素的位置,这里对HTML稍做改动,在列表下方添加了ap标签,方便定位。
接下来开始写方法,在methods中写一个paly方法,通过document.getElementById获取当前元素,这里scrollTop获取选中元素的垂直滚动条位置html滚动条代码,offsetHeight获取控件本身的高度,然后设置一个定时器,给定一个速度时间,实现自动无缝滚动的效果。
play () { var speed = 100; var wrapper = document.getElementById('wrapper'); var demo1 = document.getElementById('demo1'); var demo2 = document.getElementById('demo2'); demo2.innerHTML=demo1.innerHTML console.log(demo2.innerHTML) function Marquee(){ if(demo2.offsetHeight-wrapper.scrollTop<=0) wrapper.scrollTop-=demo1.offsetHeight; else{ wrapper.scrollTop+=1 } } var MyMar=setInterval(Marquee,speed) wrapper.onmouseover=function() {clearInterval(MyMar)} wrapper.onmouseout=function() {MyMar=setInterval(Marquee,speed)} },
因为操作是获取当前DOM元素,所以这里要等页面加载完成后才能执行滚动操作,所以这里只调用了mounted()中的paly方法,忘了在.linkContent中加上overflow:隐; 属性。
mounted(){ this.play(); },
这是结合 JavaScript 语法的无缝文本滚动效果。 虽然达到了预期,但是我现在用的是vue。 我还是想用vue来实现这个功能,但是还没研究,主要是我的a标签数据。 全部包裹在p标签中,即每一行的数据和内容都不确定,所以只能通过将div移到p标签外来实现功能。 我想知道是否有人可以给我一些指示。