美文网首页
使用mask实现轮播(擦拭视觉)

使用mask实现轮播(擦拭视觉)

作者: 羽晞yose | 来源:发表于2020-05-17 23:17 被阅读0次
擦拭轮播视觉

视觉分析:

有一块遮罩从左向右滚动,该遮罩还有左右羽化视觉。擦拭过程中,擦拭部分会变为下一句文案,未到擦拭部分依旧保持当前文案

mask

Mask允许使用者通过部分或者完全隐藏一个元素的可见区域。这种效果可以通过遮罩或者裁切特定区域的图片来实现。

mask-image: 定义设置元素上遮罩层的图像
mask-mode: 指示由 mask-image 指向的遮罩被视为亮度或阿尔法遮罩(未在真实场景使用过)
mask-repeat: 定义了遮罩图片是否重复显示多个副本,以及如何重复
mask-position: 定义遮罩图片位置,与background-position表现一致
mask-clip: 定义mask遮罩区域位置(裁切,表现同background-clip )
mask-origin: 定义遮罩起始位置(表现同background-origin)
mask-size: 定义遮罩的尺寸
mask-composite: mask合成模式(未在真实场景使用过)
mask: 图片 模式 位置 大小 重复性 影响范围 [裁切范围] 组合操作

mask一个特点,就是有色值的部分可见,透明部分将会被隐藏,如果对mask不太懂的建议百度,相关文章很多,这里不做过多介绍,这里是基于设计稿自行制作的两个mask素材图

进入与离开mask图片
<div class="marquee-wrap" ref="marquee">
    <p :class="['interest', {'enter': !textIndex}, {'leave': textIndex === 1}]"
       v-for="(textItem, textIndex) of item.list"
       :key="textIndex">{{textItem}}</p>
</div>
    .marquee-wrap {
        top: 247px/@p;
        width: 433px/@p;
        height: 72px/@p;
        left: 158px/@p;
        background: url(../img/sub_title_bg.png) no-repeat center;
        /*! autoprefixer: off */
        background-size: contain;
        /*! autoprefixer: on */
    }

    .interest {
        position: absolute;
        .flex(vm);
        .size(100%);
        color: #922b29;
        font-size: 34px;
        font-weight: 700;
        mask-size: 200% 100%;
        mask-position: -100% 0;
        mask-image: url(../img/mask.png);
    }

    .enter {
        animation: enter 1s .3s linear both;
    }

    .leave {
        mask-image: url(../img/mask_l.png);
        animation: leave 1s linear both;
    }

/* 两个动画一样,但是不切换动画名无法再次执行 */
@keyframes enter {
    from {
        mask-position: -100% 0;
    }
    to {
        mask-position: -200% 0;
    }
}

@keyframes leave {
    from {
        mask-position: -100% 0;
    }
    to {
        mask-position: -200% 0;
    }
}
marquee () {
    setTimeout(() => {
        this.childNode[this.marqueeIndex].classList.add('leave');
        this.childNode[this.marqueeIndex].classList.remove('enter');

        if (this.marqueeIndex === this.childNode.length - 1) {
            this.marqueeIndex = 0;
        } else {
            this.marqueeIndex += 1;
        }

        this.childNode[this.marqueeIndex].classList.remove('leave');
        this.childNode[this.marqueeIndex].classList.add('enter');
        this.marquee();
    }, 2000);
}

重点实现代码在上面,说一下思路,进入与离开分别赋予不同的类名,虽然动画方式一致,但是css动画重复添加类名是无法重新执行动画的,所以不能只切换mask的图片,这个实现主要是css实现,所以就不封装成组件了。进入与离开间隔0.3秒时间,而这个时间差也就形成了上面的遮罩块。动画执行1秒,延时两秒,保证利益点可在页面上展示1秒,方便用户看完利益点。

就酱~

相关文章

  • 使用mask实现轮播(擦拭视觉)

    视觉分析: 有一块遮罩从左向右滚动,该遮罩还有左右羽化视觉。擦拭过程中,擦拭部分会变为下一句文案,未到擦拭部分依旧...

  • layer的mask遮罩 使用

    mask 实例一:利用mask 实现 图片圆角 定义分类 UIView + Circle 使用: 实例二:放大效果...

  • 使用mask实现圆角

  • CSS3动画(2):mask实现line-wipe动画

    这次给大家带来的动画是使用mask(蒙版)实现line-wipe动画。效果如下: 例如:-webkit-mask-...

  • 轮播图实现

    轮播图在实际应用开发使用较多,本文说明一下具体的实现过程。 一、实现轮播图的基本控件介绍。实现轮播图需要将多张图片...

  • 轮播的实现

    轮播的实现 轮播的实现原理是怎样的?如果让你来实现,你会抽象出哪些函数(or接口)供使用?(比如 play()) ...

  • 轮播

    轮播的实现原理是怎样的?如果让你来实现,你会抽象出哪些函数(or接口)供使用?(比如 play()) 轮播的实现原...

  • 轮播的实现

    轮播的实现原理是怎样的?如果让你来实现,你会抽象出哪些函数(or接口)供使用?(比如 play()) 轮播的实现原...

  • 轮播

    轮播的实现原理是怎样的?如果让你来实现,你会抽象出哪些函数(or接口)供使用?(比如 play()) 轮播的实现原...

  • OC-循环轮播图

    这里我写了一个文件实现了视觉上是无限循环的轮播图。1、这种轮播图可以有很多种方法实现。在这里是利用UICollec...

网友评论

      本文标题:使用mask实现轮播(擦拭视觉)

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