1. Js 实现 marquee 效果

    使用RequestAnimationFrame,核心部分就是利用transformX实现位移 Js 逻辑写的比较挫,还要想想怎么改进,或者有更好的思路。 marquee的要求是两段文字的间隔能人为的控制,所以用了两个重复的p标签。 然后就是如何计算第一个p标签和第二个p标签移出了可视区域,可视区域不一定是屏幕宽度,可能是一个div设置了width和overflow实现的。 另外就是从左往右以及从右往左的区别。 从右往左 一开始p标签的位置是 position:absolute; left: 0,也就是在‘可视区域’的左边,从右往左就是移动负值。 如何判断移出‘可视区域’? 利用倍数来计算, 实际文字的宽度 / 可视区域的宽度得到3、3.5、4之类的一个倍数,用这个倍数和 目前正在变化时拿到的translateX的值 / 可视区域的宽度 假设是3倍,那么第二步计算出的值如果正好是3,说明文字的末尾已经出现在‘可视区域’,此时➕一个系数x,就可以实现两段文字的间隔(x按照实际想要的间隔自行设置)。 此时第一段文字+间隔 已经全部出现在可视区域了,接下来就要让第二段文字开始移动。第二段文字的起始位置就是‘可视区域’的宽度。 然后判断文字全部移出‘可视区域’判断 第二步骤的 倍数 – 第一步的倍数 < 一个允许范围的误差值即可。 从左往右 同样的思路,从左往右,刚开始第一个p标签也是位于 left: 0 的位置。 从左往右比较简单,translateX 移动位置 >= ‘可视区域宽度’ 即为移出可视区域,然后将第一个p标签的 translateX 设置为 -自身宽度即成为了从左边出来的元素。 两个p标签间隔多少就看,第一个p标签开始移动多少距离后让第二个p标签开始移动,这个值就可以直接设定了。 export default { data() { return {…