前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SNS项目笔记<三>--fab与遮罩

SNS项目笔记<三>--fab与遮罩

作者头像
stormKid
发布2018-09-12 15:37:05
8890
发布2018-09-12 15:37:05
举报
文章被收录于专栏:计算机编程计算机编程

<b>在项目界面搭建过程中,使用fab的时候发现ionic自带的控件中并没有遮罩这样的属性这让我们实际操作起来很不舒服如下图所示:

没有遮罩的效果.png

实际在点开feb控件的时候其他操作并不受影响,可是这样明显影响用户体验,所以必须要在主页面上增加遮罩解决问题。</b> <h3>1、思路</h3> 我们需要以下几个步骤完成我们的遮罩: <b>a、 点击fab,显示遮罩,显示fabList</b> <b>b、在遮罩显示下,点击fab,遮罩消失,fabList消失</b> <b>c、在遮罩显示下,点击遮罩,遮罩消失,fabList消失</b> 于是我们总结出,我们需要给fab绑定一个点击事件,然后需要给遮罩也绑定一个点击事件,通过*ngIf来完成显示和消失。很简单的逻辑,也不复杂。 <h3>2、研究源码:</h3><h5>2.1 fab源码 </h5>fab在我们的官方API文档中很少有介绍,顶多介绍了一些sass属性与close()方法,在我们实际操作过程中需要查看fab源码来完成。其源码目录在:项目目录/node_modules/ionic-angular/components/fab 目录下查看fab-container.d.ts文件,经过整理,其源码如下:

代码语言:javascript
复制
import { QueryList } from '@angular/core';
import { Platform } from '../../platform/platform';
import { UIEventManager } from '../../gestures/ui-event-manager';
import { FabButton } from './fab';
import { FabList } from './fab-list';

export declare class FabContainer {
    /**
     * @hidden
     */
    _events: UIEventManager;
    /**
     * @hidden
     */
    _listsActive: boolean;
    /**
     * @hidden
     */
    _mainButton: FabButton;
    /**
     * @hidden
     */
    _fabLists: QueryList<FabList>;
    constructor(plt: Platform);
    /**
     * @hidden
     */
    ngAfterContentInit(): void;
    /**
     * @hidden
     */
    clickHandler(ev: any): void;
    /**
     * @hidden
     */
    canActivateList(ev: any): boolean;
    /**
     * @hidden
     */
    toggleList(): void;
    /**
     * @hidden
     */
    setActiveLists(isActive: boolean): void;
    /**
     * Close an active FAB list container
     */
    close(): void;
    /**
     * @hidden
     */
    ngOnDestroy(): void;
}

这里我们需要一个参数_listsActive 来控制是否显示遮罩,还需要一个方法setActiveLists(isActive)来完成控制fabList的显示。

<h5>2.2 遮罩源码</h5>遮罩源码根据alert的源码样式来获取这里直接贴上源码:

代码语言:javascript
复制
<div *ngIf="isShow"  class="backdrop-div"  (click)="backdropclick($event)" ontouchmove="event.preventDefault();
event.stopPropagation();">
    <ion-backdrop disable-activated role="presentation" tappable style="opacity: 0.5; transition-delay: initial; transition-property: none;"></ion-backdrop>
</div>

这里利用isShow的布尔值来处理判断是否显示遮罩,div中有个backdropclick($event)的click事件,通过这个事件来完成遮罩的点击显示隐藏处理,另event.preventDefault();event.stopPropagation();方法来阻止事件冒泡。<a href="http://blog.csdn.net/bangrenzhuce/article/details/71159579"><此处借鉴链接></a>

<h3>3、整合代码</h3> <h5>3.1 在fab上添加ID与绑定点击事件</h5>

代码语言:javascript
复制
<!--绑定id:fabContain    button绑定点击事件:onclick()-->
<ion-fab bottom center style="margin-bottom:2%" #fabContain>
    <button ion-fab color="danger" (click)="onclick()"><ion-icon name="arrow-dropup"></ion-icon></button>
    <ion-fab-list side="top">
        <button ion-fab><ion-icon name="logo-facebook"></ion-icon></button>
        <button ion-fab><ion-icon name="logo-twitter"></ion-icon></button>
        <button ion-fab><ion-icon name="logo-vimeo"></ion-icon></button>
        <button ion-fab><ion-icon name="logo-googleplus"></ion-icon></button>
    </ion-fab-list>
</ion-fab>

<h5>3.2 在fab前添加遮罩布局</h5> 这里同2.2代码,不做过多赘述。

<h5>3.3 点击事件绑定与判断</h5>

代码语言:javascript
复制
import { FabContainer } from 'ionic-angular';
import { Component, ViewChild } from '@angular/core';
   
 isShow?:boolean; // 遮罩布局判断
@ViewChild("fabContain") fabContain:FabContainer; //整个fabContainer

//绑定button的点击事件
onclick() {
      this.isShow = !this.fabContain._listsActive;
}

 //遮罩的点击事件
backdropclick(e){
    //判断点击的是否为遮罩层,是的话隐藏遮罩层,与fablist
     if(e.srcElement.className != 'itemClass'){
          this.isShow = false;
          this.fabContain.setActiveLists(false);
     }
     e.stopPropagation();
}

这样便完成了我们的功能,接下来看看我们显示的效果如何:

功能完成,显示遮罩.png

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.07.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档