精华内容
下载资源
问答
  • Pygame 遮罩

    2021-01-30 19:20:20
    Pygame 遮罩 用途 解决不规则图形碰撞 示例 反例: 用矩形对象来检测两个圆的碰撞 # coding: utf-8 # 作者:爱编程的章老师 # 创建:2021/1/28 8:48 下午 # 邮箱:slxxf000@163.com # 微信:slxxfl # 微信公众号:A卫隆...

    Pygame 遮罩

    用途

    解决不规则图形碰撞

    示例

    反例:
    用矩形对象来检测两个圆的碰撞

    # coding: utf-8
    # 作者:爱编程的章老师
    # 创建:2021/1/28 8:48 下午 
    # 邮箱:slxxf000@163.com
    # 微信:slxxfl
    # 微信公众号:A卫隆少儿编程
    # 格言:给自己的生活增加一份向上的力,每都进步一点点
    
    
    import pygame
    from sys import exit
    
    WIDTH = 800
    HEIGHT = 800
    
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption("没用遮罩")
    clock = pygame.time.Clock()
    
    # 红色圆
    red_circle = pygame.Surface((200, 200), pygame.SRCALPHA)
    pygame.draw.circle(red_circle, "red", (100, 100), 100)
    # 红色圆的位置矩形
    red_circle_rect = pygame.Rect(600, 0, 200, 200)  # 初位置位于屏幕左上角
    
    # 蓝色圆
    blue_circle = pygame.Surface((200, 200), pygame.SRCALPHA)
    pygame.draw.circle(blue_circle, "blue", (100, 100), 100)
    # 蓝色圆的位置
    blue_circle_rect = pygame.Rect(0, 600, 200, 200)  # 初位置位于屏幕右下角
    
    screen.blit(red_circle, red_circle_rect)
    screen.blit(blue_circle, blue_circle_rect)
    pygame.display.update()
    
    
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()
        if not red_circle_rect.colliderect(blue_circle_rect):
            red_circle_rect.move_ip(-1, 1)
            blue_circle_rect.move_ip(1, -1)
            screen.fill("black")
            screen.blit(red_circle, red_circle_rect)
            screen.blit(blue_circle, blue_circle_rect)
            pygame.display.update()
    
        # 设置帧率
        clock.tick(60)
    
    
    
    
    

    效果图:
    在这里插入图片描述
    可以看到,当两个圆所在的矩形的角落发生碰撞的时候,就判定为碰撞成功.但这个显然不是我们想要的结果.
    因此,对于圆(或其他不规则的形状)不能简单的用矩形来判定碰撞

    遮罩的应用:

    # coding: utf-8
    # 作者:爱编程的章老师
    # 创建:2021/1/28 8:48 下午 
    # 邮箱:slxxf000@163.com
    # 微信:slxxfl
    # 微信公众号:A卫隆少儿编程
    # 格言:给自己的生活增加一份向上的力,每都进步一点点
    
    
    import pygame
    from sys import exit
    
    WIDTH = 800
    HEIGHT = 800
    pygame.init()
    screen = pygame.display.set_mode((WIDTH, HEIGHT))
    pygame.display.set_caption("遮罩")
    clock = pygame.time.Clock()
    
    # 红色圆
    red_circle = pygame.Surface((200, 200), pygame.SRCALPHA)
    pygame.draw.circle(red_circle, "red", (100, 100), 100)
    # 红色圆的位置矩形
    red_circle_rect = pygame.Rect(600, 0, 200, 200)  # 初位置位于屏幕左上角
    m1 = pygame.mask.from_surface(red_circle)  # 生成红球的遮罩 
    
    # 蓝色圆
    blue_circle = pygame.Surface((200, 200), pygame.SRCALPHA)
    pygame.draw.circle(blue_circle, "blue", (100, 100), 100)
    # 蓝色圆的位置
    blue_circle_rect = pygame.Rect(0, 600, 200, 200)  # 初位置位于屏幕右下角
    m2 = pygame.mask.from_surface(blue_circle)  # 生成蓝球的遮罩
    
    screen.blit(red_circle, red_circle_rect)
    screen.blit(blue_circle, blue_circle_rect)
    pygame.display.update()
    
    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()
    
        offset = blue_circle_rect.x - red_circle_rect.x, blue_circle_rect.y - red_circle_rect.y
        p = m1.overlap(m2, offset)
        if not p:
            red_circle_rect.move_ip(-1, 1)
            blue_circle_rect.move_ip(1, -1)
            screen.fill("black")
            screen.blit(red_circle, red_circle_rect)
            screen.blit(blue_circle, blue_circle_rect)
            pygame.display.update()
        # 设置帧率
        clock.tick(60)
    

    效果图:
    在这里插入图片描述
    可以看到,当我们用了遮罩的时候,两个是真实的碰到了一起才停止移动

    代码解析

    使用遮罩的基本流程:

    1. 对于一个surface对像生成一个遮罩
    mask1 = pygame.mask.from_surface(surface,threshold = 127)
    

    当surface对象是基于set_colorkey 透明时,第二个参数会忽略
    当surface对象是基于每象素透明时,第二个参数是是一个阈值.如果该象的alpha的值>127则不透明,<127则透明
    透明处的值为1,不透明的值为0

    1. 判定两个mask的碰撞情况:
    mask1.overlap(mask2, offset)
    

    offset = rect2.x - rect1.x , rect2.y - rect1.y
    offset:第二个遮罩对应的矩形的左上角与第一个遮罩对应的矩形的左上角的相对位置.
    因此,按上面的公式进行计算即可

    上式代码会返回一个值.这个值为第二个遮罩与第一个遮罩的碰撞点的相对于第一个遮罩的左上角的坐标:
    如rect1.x = 10, rect1.y = 20
    p = (20, 20)
    即这个点在 第一个矩形左上的右侧20 象素,下方20象素的位置
    即实际位置为(30,40)
    如果没有碰撞,则返回一个None的值

    展开全文
  • 遮罩效果全解(13种方法)

    千次阅读 2021-02-05 02:34:10
    初学者关于遮罩的话题问的较多,下面我将遮罩的一些常见问题进行一下归纳。1、请问遮罩的原理是什么?遮罩层好比黑夜中的一支手电筒,照在哪儿(指被遮罩层)哪儿就显现。第一步:创建两个图层,命名,一个是遮罩层,...

    初学者关于遮罩的话题问的较多,下面我将遮罩的一些常见问题进行一下归纳。

    1、请问遮罩的原理是什么?

    遮罩层好比黑夜中的一支手电筒,照在哪儿(指被遮罩层)哪儿就显现。

    第一步:创建两个图层,命名,一个是遮罩层,一个是被遮罩层;

    第二步:在被遮罩层图层输入文字“闪吧,我的最爱”;

    第三步:在遮罩层随便画一个形状,例如一个圆;

    第四步:此步最关键。点击遮罩层图层,右键选择“遮罩层”,如图1(1)

    80867292_1.gif

    2、我想让遮罩层运动起来,就象探照灯一样的效果,应如何做?

    第一步:把上面的圆转换为图形元件;

    第二步:在第15帧处插入关键帧,选中元件,把它放在场景的最右端,在两帧之间右键选择“创建补间动画”,选中第1帧,右键选择“复制帧”,在第30帧处粘贴帧,在第15帧和第30帧处右键选择“创建补间动画”;

    第三步:把被遮罩层的帧延长到第30处;

    3、我想让遮罩层随鼠标移动而移动应怎样做?

    第一步:选中遮罩层,右键选择“遮罩层”,去掉前面的勾,此时取消了遮罩;选中圆,右键选择“转换为元件”,在弹出的对话框中选择“影片剪辑”,在主场景中给它个实例名mask_mc。

    第二步:选中被遮罩层上的文字,同样转换为影片剪辑元件,实例名为_mc

    第三步:新建图层,名为“动作”,选中第一帧,写如下代码:

    _mc.setMask(mask_mc);//设置_mc被mask_mc遮罩

    mask_mc.onEnterFrame = function() {

    //mask_mc在运行每一帧时执行函数

    this._x = _xmouse;

    this._y = _ymouse;

    //mask_mc的坐标等于鼠标的坐标

    4、我想让遮罩层随鼠标移动有缓冲的效果应如何做?

    把问题3的第三步代码改为:

    _mc.setMask(mask_mc);

    var speed:Number = 5;//申明变量

    mask_mc.onEnterFrame = function() {

    this._x += (_xmouse-this._x)/speed;//让遮罩层缓冲运动

    this._y += (_ymouse-this._y)/speed;

    5、某对象的边框一闪而过的效果怎么做?

    [效果1]

    [效果2]

    下面以效果2为例详解其制作过程

    第一步:创建三个图层,从上到下名称分别为“边框”、“矩形”、“文字”。

    第二步:在“文字”图层上输入文字:“闪吧”,延长帧到第40帧处。

    第三步:选中“文字”图层的第一帧复制帧,粘贴帧到“边框”图层的第一帧上;将文字按住Ctrl+B,连按两次把文字打散;选中右侧“工具”栏中的“墨水瓶工具”,在打散的文字边上点击进行描边;在该帧上用鼠标进行点击(即全选该帧上的所有对象),然后把鼠标移到右侧“工具”栏中的“填充色”上点击,再把鼠标移到弹出对话框中的右上角,将填充色设置为无;选中刚才描出的边线,在属性中将其笔触高度设置为1.5。具体设置和效果见图1:

    80867292_2.gif

    第四步:选中“边线”,选择“修改”→“形状”→“将线条转换为填充”;把帧延长到第40帧处。(此步是关键,不能用线条作遮罩层,应转换为填充)具体设置见图2:

    80867292_3.gif

    第五步:创建图形元件,在该元件编辑场景中画一个矩形,从上到下进行线形渐变,具体设置见图3;把该元件从库中拉入到主场景中“矩形”图层上的第一帧上,其位置在文字的上方;在第40帧处插入关键帧,把该元件的位置移到文字的下方;在第1帧和第40帧处右键选择“创建补间动画”。

    80867292_4.gif

    第六步:选中“边框”图层,右键选择“遮罩层”。

    6、如何做出渐变、半透明、羽化遮罩效果?

    [渐变效果]

    第一步:创建两个图层,从上到下名称分别是“遮罩”、“渐变”。

    第二步:在“遮罩”图层中输入文字“闪吧,我的最爱!”。

    第三步:在“渐变”图层中画一个矩形,填充渐变色。

    第四步:选中“遮罩”图层,右键选择“遮罩层”。

    [羽化效果]

    第一步:创建两个图层,从上到下名称分别是“遮罩”、“图片”。

    第二步:在“图片”图层上导入一张图,并转换为影片剪辑元件,实例名为tp_mc,延长帧到第40帧;在其属性面板中勾选“使用运行时位图缓存”。

    第三步:在“遮罩”图层上画一个小圆,转换为影片剪辑元件,实例名为mask_mc;选择属性面板中的“滤镜”里的“模糊”,输入模糊值均为100;在第40帧处插入关键帧,把圆放大;创建补间动画。

    第四步:在“动作”图层的第一帧上写代码:

    tp_mc.setMask(mask_mc)

    半透明遮罩:把你半透明的遮罩层复制到上层即可。

    7、我用静态文字作遮罩层或作为被遮罩时怎么没有效果?

    方法①将文字连按两次Ctrl+B,把文字打散。

    方法②更改该文字的属性,不采用“使用设备字体”。

    方法③把文字转换为影片元件,实例名为wz_mc;把遮罩转换为影片元件,实例名为mask_mc;在帧上写代码wz_mc.setMask(mask_mc)

    8、动态文本设置被遮罩怎么没有效果?

    方法①把动态文本转换为影片元件,实例名为wz_mc,创建遮罩影片元件,实例名为mask_mc;然后在帧上写代码:wz_mc.setMask(mask_mc)

    方法②选择嵌入,在弹出的对话框中出现的“包含这些字符”里输入动态文本中要显示的文字。(但这种方法会使文件体积变大)

    9、怎样让遮罩层沿着引导层上的任意路径运动?

    [要点]

    把遮罩先做成沿引导层上路径运动的影片剪辑,再把该影片剪辑设为遮罩层

    [步骤]

    第一步:创建图形元件,名称为“圆”,画一个圆。

    第二步:创建影片剪辑元件,名称为“运动的圆”,把图形元件“圆”拖入;让圆沿引导层上的曲线运动起来。如图9:

    80867292_5.gif

    第三步:在主场景中创建两个图层,从上到下名称分别为“遮罩”、“背景”;把“运动的圆”拖入到主场景中的“遮罩”图层上;在“背景”图层上导入一张图片;选中“遮罩”图层,右键选择“遮罩层”。

    10、一般右键选择设置“遮罩层”时只能遮罩一个图层,那多个图层怎么做?

    方法①把没有被遮罩的图层拖入到已经被遮罩和遮罩层之间,再调整图层顺序。

    方法②用鼠标按住没有被遮罩的图层不放,然后往上推,当出现灰色的虚线时释放鼠标即可。如图10:

    80867292_6.gif

    11、空心圆做遮罩怎么中间的空白处也作了遮罩?

    [方法]把空心圆不能做成影片剪辑元件,但可以是图形元件。

    12、放大镜是如何应用遮罩的?

    第一步:创建四个图层,从上到下名称依次是“动作”、“放大镜”、“遮罩”、“底图”。

    第二步:创建影片剪辑元件,名称为“底图”,导入一张图;把该元件拖入到主场景中的“底图”图层上,实例名为dt_mc。

    第三步:创建影片剪辑元件,名称为“遮罩”,画一个圆,填充类型为放射状,中间透明,四周不透明;把该元件拖入到主场景中的“遮罩”图层上,实例名为mask_mc。再拖一个到“放大镜”图层上,实例名为fdj_mc。

    第四步:在“动作”图层的第一帧上写如下代码:

    Mouse.hide();//鼠标隐藏

    var speed:Number = 4;//申明变量

    dt_mc.duplicateMovieClip("fdt_mc", 0);//复制底图为放大图

    fdt_mc._xscale = fdt_mc._yscale=150;//放大图放大

    fdt_mc.setMask(mask_mc);//设置放大图被遮罩元件遮罩

    fdt_mc.swapDepths(fdj_mc);//把放大镜放在最上层

    mask_mc.onEnterFrame = function() {

    fdt_mc._x = -this._x*0.5;//设置放大图的坐标随遮罩层的变化而变化

    fdt_mc._y = -this._y*0.5;

    fdj_mc._x = this._x += (_xmouse-this._x)/speed;//让遮罩层和放大镜坐标重合且缓冲运动

    fdj_mc._y = this._y += (_ymouse-this._y)/speed;

    updateAfterEvent();//更新舞台

    13、我想鼠标点击时遮罩层出现并拖动,再次点击时消失怎么做?

    在第12问的第四步代码中作如下改动:

    Mouse.hide();

    dt_mc.duplicateMovieClip("fdt_mc", 1);

    fdt_mc._xscale = fdt_mc._yscale=150;

    fdt_mc.setMask(mask_mc);

    fdt_mc.swapDepths(fdj_mc);

    mask_mc._visible = fdj_mc._visible=fdt_mc._visible=0;

    mask_mc.onEnterFrame = function() {

    fdt_mc._x = -this._x*0.5;

    fdt_mc._y = -this._y*0.5;

    fdj_mc._x = this._x += (_xmouse-this._x)/4;

    fdj_mc._y = this._y += (_ymouse-this._y)/4;

    updateAfterEvent();

    };

    onMouseDown = function () {

    this.id = !this.id;

    if (this.id) {

    mask_mc._visible = fdj_mc._visible=fdt_mc._visible=1;

    }

    if (!this.id) {

    mask_mc._visible = fdj_mc._visible=fdt_mc._visible=0;

    }

    14、导入外部的影片(如文件名1.swf)或图片(如文件名1.jpg),怎样设置遮罩?

    第一步:创建影片剪辑元件,画一个你要的遮罩形状;把该元件拖入到主场景中,实例名取mask_mc。

    第二步:在帧上写代码:

    var my_mcl:MovieClip = createEmptyMovieClip("my_mcl", getNextHighestDepth());

    var mcloader:MovieClipLoader = new MovieClipLoader();

    mcloader.addListener(this);

    mcloader.loadClip("1.jpg", my_mcl);

    mask_mc._visible = 0;

    this.setMask(mask_mc);

    第三步:保存,并在该文件所在的文件夹内放一张图片,名称为1.jpg

    如果导入的是外部影片,则把"1.jpg"改为"1.swf",当然,外部影片的名称为1.swf

    [后记]

    遮罩无所不在,无奇不有,你还可以利用遮罩做出电影字幕、水波、万花筒、百叶窗等强视觉的作品出来。请跟贴的朋友们最好交一幅有创意的作品,让大家分享,好的作品版主一定会给你加分的哟!

    [以上所有的Fla源文件]点击这里下载源文件

    展开全文
  • 前端制作遮罩与蒙版

    2021-02-05 06:39:53
    -1遮罩: 有色则显示,无色抠取,半透明则半透明蒙版: 黑色则抠除,白色显示,灰色则半透明概念上两者非常容易混淆,但完成的效果是一样的,需记住哪个是无色抠取,哪个是黑色抠除。再者还有个裁剪,只是做裁切,...

    34cf992e0251

    -1

    遮罩: 有色则显示,无色抠取,半透明则半透明

    蒙版: 黑色则抠除,白色显示,灰色则半透明

    概念上两者非常容易混淆,但完成的效果是一样的,需记住哪个是无色抠取,哪个是黑色抠除。

    再者还有个裁剪,只是做裁切,没有对半透明情况的处理。

    这样一说就知道,本文阅读起来可能是会有点乱的。

    那么前端方法中 如何实现,又各 有哪些应用场景 呢?

    mask(css) (遮罩)

    mask(svg)(蒙版)

    background-clip(css)(裁切)

    clip(canvas)(裁切)

    globalCompositeOperation(canvas)(遮罩)

    clip-path(css, svg)(裁切)

    其他旁门左道

    mask(css)

    比较容易搜到的,也是用得最多的,强得一批。

    现在是只有遮罩功能的,mask 指定的是下层形状,本元素及其所有子级为上层图案。

    以后的发展可能会通过 mask-composite 实现蒙版,小期待一下吧。

    遮罩嘛,即有色就显示,无色则隐藏。

    rgba(0,0,0,0)、tranpsarent,png 图片中的透明 或 无色 就抠除。

    mask 和 background 的设置非常类似,也可以缩写:

    mask-image / mask-repeat / mask-position / mask-size / mask-origin / mask-clip

    mask-image 也和 background-image 一样支持 url, gradient,image-set,element 等等。

    举几个栗子:

    /* 滚动容器底部带点效果 */

    .scroller-mask {

    -webkit-mask: linear-gradient(#000 calc(100% - 5em), transparent);

    mask: linear-gradient(#000 calc(100% - 5em), transparent);

    }

    /* 当然用 linear-gradient + pointer-events:none 也是不错的方法 */

    34cf992e0251

    image

    /* 这个难理解一点,你看哪个有遮罩,哪块是透明的,唔,最好手写一下试试 */

    .mask {

    -webkit-mask-image: url(img/flower.png) center / 0 0 no-repeat;

    mask-image: url(img/flower.png) center / 0 0 no-repeat;

    animation: mask 2s;

    }

    @keyframes mask {

    0% {-webkit-mask-size: 0 0;mask-size: 0 0}

    100% {-webkit-mask-size: 100% 100%;mask-size: 100% 100%}

    }

    34cf992e0251

    image

    DEMO:https://foreverz133.github.io/demos/works/mask/ (网速有点慢)

    至于剩下的 mask-mode / mask-type / mask-composite 浏览器支持还不太妙,暂可以不考虑。

    但功能上却是强大,需要更多了解还请自行翻阅 文档。

    PS:兼容性 方面虽然一片红,IE 什么的抛弃掉,实验下来其实还不错。写上 -webkit-mask 基本都能用。

    PPS:firefox 中动画时 mask-size 小于 100% 会不显示,但定值可以,原因不知。

    mask(svg)

    个人有点莫名的习惯,不管做什么效果,都会往 SVG 上想一想,可能源于它强大的功能吧。

    相比 html+css 多了很多特性,如路径/线条的设置/诸多滤镜/视图限定等;

    相比 canvas 多了一些 dom 上的便捷操作,如事件。

    SVG 可以用 mask 来实现 蒙版,用 clipPath 来实现 裁剪(下文会讲)。

    区分一下,svg mask 为蒙版,白色为显示;css mask 为遮罩,有色为显示。

    如果 mask 的颜色 fill 不填或为 none 表示无色,则不显示

    如果有色但非黑白色,则按色值计算透明度,如 red 为 rgb(255,0,0) 相当于 opacity: 0.3333;

    其中 rgba(0,0,0,.5) 并不会显示半透明,因为它是黑色的,挺奇怪

    mask 蒙版内可以包裹透明图片或文字。

    但使用蒙版的元素,却莫名不能是 image,这就很完蛋呀,有待研究。

    background-clip(css)

    如果 css 的 mask 适用于图片和渐变等的话,那 background-clip:text 就适用于文字。

    字面意思,将背景裁切成文字范围。

    另外,background-clip 还可以设 content-box,也是不错的功能,

    默认 padding-box,border-box 有上边框不被修改的 BUG。

    注:兼容性 上,明文规定要加 -webkit-。顺便抛弃 IE。

    .demo {

    background-image: linear-gradient(red, #000);

    -webkit-background-clip: text;

    color: transparent; /* 不见得非要用 text-fill-color */

    }

    很多文章误以为是 text-fill-color 实现了遮罩功能,其实是 background-clip:text 呀!

    clip(canvas)

    clip 在 canvas 中本来的作用是切一块画布独立出来。

    拿来做遮罩效果也是可以的,但并非真的遮罩,只是裁剪,因为它不是按有色无色来判断显示的。

    var cv = document.querySelector('#canvas');

    var img = document.querySelector('img');

    var w = cv.width = window.innerWidth, h = cv.height = window.innerHeight;

    var ctx = cv.getContext('2d');

    ctx.save();

    ctx.arc(60, 60, 50, 0, 2*Math.PI);

    ctx.clip(); // 切一个圆形画布出来

    ctx.drawImage(img, 0, 0, img.width, img.height);

    ctx.restore();

    还可以用 beginPath, lineTo 等线条操作来形成图形。

    注:fillRect 和 strokeRect 是无法被切出来的,要用 rect。

    注:为了避免影响其他地方,用 save 和 restore 包起来就行了。

    注:文字遮罩用 clip 是无法实现的。

    globalCompositeOperation(canvas)

    修改 canvas 的渲染规则。比如后写的盖住前面的,改成后写的放到低层之类的。

    这些规则中有一个 source-in,就能实现 遮罩(按黑白色来判断显隐)。

    ctx.fillRect(10, 10, 200, 200);

    ctx.globalCompositeOperation = "source-atop"; // 改为前者区域绘制后者

    ctx.drawImage(img, 50, 50, img.width, img.height);

    ctx.globalCompositeOperation = "source-out";

    如果你用的 strokeRect 和 fillText 那绘制出来的也是相应效果哟。

    如果前者是半透明的,覆盖的后者渲染出来也会是半透明的。

    如果前者是半透明的 PNG 图片,覆盖的后者出来的也会是半透明,强无敌。

    注:globalCompositeOperation 的默认值是 source-over,用完了别忘了改回来,不然会影响后续操作。

    全部规则效果一览:https://foreverz133.github.io/demos/single/globalCompositeOperation.html

    其中有一些可以拿出来提一下,挺好玩的。

    source-in:交叉的部分渲染后者

    destination-in:交叉的部分渲染前者

    destination-out:去掉交叉的部分

    destination-over:后者放至下层

    clip-path(svg)

    主要还是以裁剪为主,裁剪当然是不会根据形状的颜色什么的来判断显隐的咯。

    clip-path(css)

    css 的 clip-path 是老版属性 clip 的改良版,clip 必须绝对定位,且只有矩形还只能 px。

    clip-path 则支持方形/圆形/椭圆形/多边形,单位也更丰富。

    // 方形,上右下左距边框距离 round 圆角

    clip-path: inset(1px 10% 1em 1vw round 2px 4px 6px 8px);

    // 圆形,半径 at 位置

    clip-path: circle(15px at 20px 20px);

    // 椭圆,半轴长 at 位置

    clip-path: ellipse(50% 30% at 50% 50%);

    // 多边形

    clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);

    我觉得 clip-path 和 border-radius 一样,改个图片或者盒子的样式又方便又爽。

    但也不一样,因为是裁剪,像 border 呀子级内容呀什么的也是会被剪掉的,hover 也还是原来的尺寸。

    其他旁门左道

    background

    border

    除此之外,radial-gradient 可以完成部分类似功能,比如圆形的镂空,位置和大小设置相较也更方便。

    shape-outside

    shape-outside 仅能算作是高级版 float 扩展,也与本文毫无关系。

    只是因为既然写了 clip-path 那 shape-outside 就提一下,避免有理解错误。

    注:shape-outside 得是浮动元素时才有效。

    注:它能设的值和 clip-path 基本一致

    它并不会改变本身什么东西,形状不会变,border 等也还是原来的样子,还得结合 clip-path 来用。

    它只是让其他与其贴边的元素有了一个不一样的贴边效果。

    .box {

    width: 100px;

    height: 100px;

    float: left;

    background: pink;

    border: 3px solid #333;

    box-shadow: 0 0 10px;

    margin-right: 20px;

    clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);

    shape-outside: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%);

    }

    34cf992e0251

    tim 20171115110340

    PS:兼容性 吧,怎么说呢,回退到方形影响应该不大。

    虽然 clip-path 又不像 border-radius 可以加边框阴影什么的,但其实 polygon 多边形可以有高级玩法,

    比如:https://codepen.io/airen/pen/VPKQxb

    文档 显示以后会支持 url 和 element 等,那就很方便了呀。顺便再期待一下 shape-inside 的出现。

    你思考一下 css 的 mask / background-clip / clip-path 和 shape-outside 的使用场景,这其实很有意思。

    结语

    遮罩是有色的部分显示图案,蒙版是白色的部分显示图案,裁剪只是裁成这个形状,三者的实际妙用在本文中并没有深入书写,仅算是梳理其功能和明确其区别。

    还请大佬们多多分享此方面的巧妙案例咯,让小弟也开开眼。

    展开全文
  • 废话不多说了,直接给大家写js代码了,代码如下所示:js全屏透明遮罩锁屏效果#pageOverlay{visibility:hidden;position:fixed;top:0;left:0;z-index:1987;width:100%;height:100%;background:#000;filter:alpha...

    废话不多说了,直接给大家写js代码了,代码如下所示:

    js全屏透明遮罩锁屏效果

    #pageOverlay{visibility:hidden;position:fixed;top:0;left:0;z-index:1987;width:100%;height:100%;background:#000;filter:alpha(opacity=70);opacity:0.7;}

    /*IE6 fixed*/

    * html{background:url(*) fixed;}

    * html body{margin:0;height:100%;}

    * html #pageOverlay{position:absolute;left:expression(documentElement.scrollLeft+documentElement.clientWidth-this.offsetWidth);top:expression(documentElement.scrollTop+documentElement.clientHeight-this.offsetHeight);}

    (function(){

    // 获取对象

    var $ = function (id){

    return document.getElementById(id);

    };

    // 遍历

    var each = function(a, b) {

    for (var i = 0, len = a.length; i < len; i++) b(a[i], i);

    };

    // 事件绑定

    var bind = function (obj, type, fn) {

    if (obj.attachEvent) {

    obj['e' + type + fn] = fn;

    obj[type + fn] = function(){obj['e' + type + fn](window.event);}

    obj.attachEvent('on' + type, obj[type + fn]);

    } else {

    obj.addEventListener(type, fn, false);

    };

    };

    // 移除事件

    var unbind = function (obj, type, fn) {

    if (obj.detachEvent) {

    try {

    obj.detachEvent('on' + type, obj[type + fn]);

    obj[type + fn] = null;

    } catch(_) {};

    } else {

    obj.removeEventListener(type, fn, false);

    };

    };

    // 阻止浏览器默认行为

    var stopDefault = function(e){

    e.preventDefault ? e.preventDefault() : e.returnValue = false;

    };

    // 获取页面滚动条位置

    var getPage = function(){

    var dd = document.documentElement,

    db = document.body;

    return {

    left: Math.max(dd.scrollLeft, db.scrollLeft),

    top: Math.max(dd.scrollTop, db.scrollTop)

    };

    };

    // 锁屏

    var lock = {

    show: function(){

    $('pageOverlay').style.visibility = 'visible';

    var p = getPage(),

    left = p.left,

    top = p.top;

    // 页面鼠标操作限制

    this.mouse = function(evt){

    var e = evt || window.event;

    stopDefault(e);

    scroll(left, top);

    };

    each(['DOMMouseScroll', 'mousewheel', 'scroll', 'contextmenu'], function(o, i) {

    bind(document, o, lock.mouse);

    });

    // 屏蔽特定按键: F5, Ctrl + R, Ctrl + A, Tab, Up, Down

    this.key = function(evt){

    var e = evt || window.event,

    key = e.keyCode;

    if((key == 116) || (e.ctrlKey && key == 82) || (e.ctrlKey && key == 65) || (key == 9) || (key == 38) || (key == 40)) {

    try{

    e.keyCode = 0;

    }catch(_){};

    stopDefault(e);

    };

    };

    bind(document, 'keydown', lock.key);

    },

    close: function(){

    $('pageOverlay').style.visibility = 'hidden';

    each(['DOMMouseScroll', 'mousewheel', 'scroll', 'contextmenu'], function(o, i) {

    unbind(document, o, lock.mouse);

    });

    unbind(document, 'keydown', lock.key);

    }

    };

    bind(window, 'load', function(){

    $('btn_lock').onclick = function(){

    lock.show();

    };

    $('pageOverlay').onclick = function(){

    lock.close();

    };

    });

    })();

    开启锁屏

    1. www.jb51.net
    2. www.jb51.net
    3. www.jb51.net
    4. www.jb51.net
    5. www.jb51.net
    6. www.jb51.net
    7. www.jb51.net
    8. www.jb51.net
    9. www.jb51.net
    10. www.jb51.net
    11. www.jb51.net
    12. www.jb51.net
    13. www.jb51.net
    14. www.jb51.net
    15. www.jb51.net
    16. www.jb51.net
    17. www.jb51.net
    18. www.jb51.net
    19. www.jb51.net
    20. www.jb51.net
    21. www.jb51.net
    22. www.jb51.net
    23. www.jb51.net
    24. www.jb51.net
    25. www.jb51.net
    26. www.jb51.net
    27. www.jb51.net
    28. www.jb51.net
    29. www.jb51.net
    30. www.jb51.net
    31. www.jb51.net
    32. www.jb51.net
    33. www.jb51.net
    34. www.jb51.net
    35. www.jb51.net
    36. www.jb51.net
    37. www.jb51.net
    38. www.jb51.net
    39. www.jb51.net
    40. www.jb51.net
    41. www.jb51.net
    42. www.jb51.net
    43. www.jb51.net
    44. www.jb51.net
    45. www.jb51.net
    46. www.jb51.net
    47. www.jb51.net
    48. www.jb51.net
    49. www.jb51.net
    50. www.jb51.net
    51. www.jb51.net
    52. www.jb51.net
    53. www.jb51.net
    54. www.jb51.net
    55. www.jb51.net
    56. www.jb51.net
    57. www.jb51.net
    58. www.jb51.net
    59. www.jb51.net
    60. www.jb51.net
    61. www.jb51.net
    62. www.jb51.net
    63. www.jb51.net
    64. www.jb51.net
    65. www.jb51.net
    66. www.jb51.net
    67. www.jb51.net
    68. www.jb51.net
    69. www.jb51.net
    70. www.jb51.net
    71. www.jb51.net
    72. www.jb51.net
    73. www.jb51.net
    74. www.jb51.net
    75. www.jb51.net
    76. www.jb51.net
    77. www.jb51.net
    78. www.jb51.net
    79. www.jb51.net
    80. www.jb51.net

    下面一段代码是用js写的登录遮罩效果

    遮罩

    #blanks{

    display:none;

    width:100%;

    //height:100%;

    height:100px;

    position:absolute;

    top:0;

    background-color:#ccc;

    z-index:1000;

    -moz-opacity: 0.7;

    opacity:.70;

    filter: alpha(opacity=70);

    }

    #login{

    padding:18px;

    display:none;

    background-color:pink;

    width:300px;

    height:100px;

    position:absolute;

    left:400px;

    top:20%;

    z-index:1001;

    }

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    《人生》前15年左右都是些教学关卡,弱弱的,你还没法点“跳过”。

    作为一个初来乍到的新手,你有大把的时间和用不完的精力,但几乎毫无经验。你会发现游戏的大多数元素,

    像什么牛逼的工作啦,财富啦,伴侣啦都还没有解锁,一直到你真正拥有了它们。

    这段时间,你的技能升级得非常快。在之后的游戏中,你再也不可能像这个阶段一样时间充裕而且精力充沛。

    如果想要玩出水平,最重要的是要把时间安排得尽可能合理。你的任何一个行动都会改变你的状态和技能

    用户名:

    密  码:

    close.png

    function setHeight()

    {

    var h=document.documentElement.scrollHeight;

    document.getElementById("blanks").style.height=h+"px";

    }

    function hidediv()

    {

    document.getElementById("login").style.display="none";

    document.getElementById("blanks").style.display="none";

    }

    function showLogin()

    {

    document.getElementById("login").style.display="block";

    document.getElementById("blanks").style.display="block";

    }

    以上所述是基于JavaScript实现全屏透明遮罩div层锁屏效果的相关内容,希望对大家有所帮助。

    展开全文
  • 使用动效时,有时会需要使特定组件外的动效不显示,比如粒子特效只显示在特定区域或当列表中的特效移出显示区域时不显示动效,这时就需要使用遮罩,但是简单的使用Mask对动效是不起作用的。针对Spine动效和...
  • 1 .创建两个材质球 分别是遮罩和背景 参数值如下设置 2 创建两个image 放在同一层级 3 把材质托给 image 效果实现
  • 遮罩效果 css3

    2020-12-31 13:36:30
    CSS3提供了遮罩效果,这是以前CSS2中比较难实现的一个新特性,配合SVG或者canvas同样也可以实现遮罩效果,他的效果就如下图所示:简单的说就是在一个层上面加一个过滤层,过滤层透明度越低,底层就显示的越多,反之,...
  • 遮罩Mask

    2020-12-19 21:29:40
    一、遮罩遮罩层范围内可看见被遮罩层图层,遮挡层范围可看见笼罩层图形 遮罩层必须至少有两个图层,上面的一个图层为“遮罩层”,下面的称“被遮罩层”;这两个图层中只有相重叠的地方才会被显示。也就是说在遮罩...
  • 文章目录效果截图功能介绍实现思路实现步骤获取数据绘制反选遮罩层 效果截图 先上截图: 功能介绍 本例子基于 React hooks + Typescript + Cesium 实现绘制反选遮罩层;并通过封装对应的组件,完成反选遮罩层的绘制...
  • elementui 遮罩

    2021-10-28 11:07:46
    今日突发奇想,在之前的项目中是通过jQyery + layUI实现遮罩效果的,效果如图 但jQuery和layUI的时代已经过去了,于是思考了一下如何通过VUE + elementUI实现遮罩效果,本人没亲手实现,但目测通过elementUI中的...
  • html5 弹出遮罩

    2021-03-08 00:11:07
    环境:phonegap,jquery mobile 测试情况:这个遮罩层页面在所有PC端浏览器、手机端浏览器、小米2S,联想PAD上测试,弹出遮罩层都是一样的,没有问题,但是在三星galaxy 2s,oppo的手机上测试,弹出的遮罩层显示...
  • 1、FLASH遮罩动画原理及应用课时:1课时(40分钟) 教学目标:1、认知目标:理解遮罩的概念、遮罩的原理、遮罩层与被遮罩层的关系,掌握遮罩层的应用。2、能力目标:培养学生分析FLASH作品的能力,举一反三,培养解决...
  • Android遮罩引导层

    2021-06-03 01:14:17
    第一次写还是有点不知所措,就将就着看吧您内话说APP,绝大多数会有新手引导层,需要遮罩的那种,类似这样的:很久很久之前的一个项目,在github上找了一个,用着不是很舒服,比较繁琐,而且基本不能定制,很蛋疼,...
  • canvas生成遮罩图片

    2021-06-11 14:56:00
    首先我们知道css3中增加了不少好用、好玩的css3样式可以使用。...CSS遮罩——如何在CSS中使用遮罩,这篇文章已经详细说明了遮罩如何使用了,我这里就不赘述了。今天我这里想要说明的是,如何通过这个完成生成一个合...
  • 添加遮罩

    2021-08-04 07:09:31
    遮罩层效果相信是许多开发需求时候经常会碰到的一个情况,实现遮罩层效果的方式有很多种,下面介绍最简单的一种,利用css来实现遮罩dom节点代码:1 css样式代码1 .ui-progressbar{2 position: absolute;3 top:40%;4 ...
  • 欢迎观看 Premiere Pro 教程,小编带大家学习 Pr 的基本编辑技巧,了解如何添加轨道遮罩键。使用轨道遮罩键效果自动根据其他剪辑的内容,让一个剪辑的某些区域变透明。 可以使用其他图像中的内容作为参考,来控制一...
  • 在使用瓦片地图的时候,可以通过加入特殊的层实现行政区域遮罩和反遮罩 获取行政区域轮廓数据:http://datav.aliyun.com/tools/atlas/index.html#&lat=30.37018632615852&lng=106.68898666525287&zoom=...
  • 遮罩层 js 事件 穿透 搜索资料 本地图片 图片链接 代码 提交回答 匿名 回答自动保存中html中的frameset,假如有上中下三个frame,遮罩层来自中间的frame,弹只需5个步骤就可以解决遮住全屏的问题。 1.打开UE编辑器...
  • 遮罩和图层

    2021-01-12 00:08:41
    反向遮罩 他只裁剪 mask范围内的 圆形 使用图片来做遮罩,例如一个圆形头像,就要这个圆形的遮罩图 放到这里 拖动修改就行 cc.Layout 1.布局组件: 有些物体的布局,可以不用我们写死位置,可以根据内容来排版 比如垂直...
  • 精灵遮罩: 一个SpriteRenderer,用作显示图形,一个SpriteMask用作控制图形显示区域 在SpriteRenderer中选择MaskInteraction遮罩类型 None-不遮罩 Visible Inside Mask-遮罩区域的图形显示,遮罩以外的图形隐藏 ...
  • html 遮罩

    2021-06-09 06:34:55
    js实现的遮罩层并可以移动的效果body {margin: 0px;}.ch1{display: none;position: absolute;z-index: 1000;height: 100%;width: 100%;filter:Alpha(opacity=30);}.ch2{left: 0px;top: 0px;display: none;position: ...
  • ajax遮罩

    2021-06-09 04:07:58
    遮罩层2种方式:引入jquery插件模式1. 下载 showLoading.css , jquery.showLoading.min.js 两个文件2. 引入这2个文件3. 使用这个组件functionshowloading(url,data){$("body").showLoading();$.ajax({url:url,data:...
  • Android 遮罩层效果

    2021-01-15 01:02:43
    (用别人的代码进行分析) 不知道在开发中有没有经常使用到这种效果,所谓的遮罩层就是给一张图片不是我们想要的形状,这个时候我们就可以使用遮罩效果把这个图片变成我们想要的形状,一般使用最多就是圆形的效果,如...
  • 动态地计算出遮罩层的高度和宽度,特别注意的是,为保证遮罩层在页面滚动时也遮住窗口,遮罩层的高宽应该覆盖住滚动区域。 动态计算的代码如下,其中mask变量指向遮罩层: function calculateSize() { var b = ...
  • css3 引导遮罩

    2021-08-05 01:46:23
    https://blog.csdn.net/tangtang5963/article/details/51276560要实现遮罩层和部分区域高亮...让遮罩层的的宽度和高度等于目标元素的宽度和高度,剩下的遮罩效果就是合理设置遮罩层四个border的值的大小,使遮罩层铺...
  • 图片热区阴影遮罩 area_shadow

    千次阅读 2021-12-07 14:46:51
    }, methods: { hiddenDiv() { // 移出 遮罩的div 则隐藏遮罩的div let e = document.getElementById("shadowDiv"); e.style.display = "none"; }, openHref(event) { // 在阴影中点击打开链接 let e = document....
  • 最近也有再搞flash,所以第一反应就是遮罩,android里面自己也没搞过。google搜索“android mask“挺多资料的,这里把例子与大家分享。先上效果图: 未命名.jpg (21.63 KB)2013-4-27 12:52好了现在开始代码部分,这里...
  • html遮罩实现

    2021-06-09 06:12:48
    demo/* 半透明的遮罩层 */#overlay {background: #000;filter: alpha(opacity=50); /* IE的透明度 */opacity: 0.5; /* 透明度 */display: none;position: absolute;top: 0px;left: 0px;width: 100%;height: 100%;z-...
  • 这个lisp程序的作用是,将单行文本转换为多行文本,为多行文本设置背景遮罩;背景遮罩边界偏移因子为1.1,使用图形背景颜色填充。;s1选择集名称,imn...
  • html简单遮罩实现

    2021-11-12 09:37:41
    应用场景:可自定义的遮罩示例 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>html简单遮罩实现</title> <style type="text/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,605
精华内容 23,442
关键字:

遮罩

友情链接: DoExcelCombin.rar