加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular – 根据屏幕大小更改md-grid-list的布局或cols值

发布时间:2020-12-17 08:02:32 所属栏目:安全 来源:网络整理
导读:我正在使用 angular material 2的网格列表. 这是plunker https://plnkr.co/edit/0v9R3e4x3tThh85147x7?p=preview 在这里,我定义了一个包含三列的网格列表,并且有三个切片(在一行中显示为三列). 我想改变瓷砖的布局方向,如果屏幕尺寸在某一点缩小,那么所有的
我正在使用 angular material 2的网格列表.

这是plunker
https://plnkr.co/edit/0v9R3e4x3tThh85147x7?p=preview

在这里,我定义了一个包含三列的网格列表,并且有三个切片(在一行中显示为三列).

我想改变瓷砖的布局方向,如果屏幕尺寸在某一点缩小,那么所有的瓷砖应该在另一个下面的第一列中,这是cols参数值的某种变化为1.它怎么可能?灵活布局是否可行?

仅适用于div:

要仅将列更改应用于div,请将div添加到div,例如#gridView.使用此ref来获取包含grid-list的div的宽度.然后我们可以在div宽度改变时使用flex-layout中的[fxShow],并根据div的大小设置col编号.

HTML:

<div style="background: skyblue"
     #gridView
     [ngStyle]="{ 'width.px': divSize }"
     [fxShow]="setColNum(gridView.style.width)">
  <md-grid-list [cols]="columnNum" 
                rowHeight="100px">
    <md-grid-tile>
      A
    </md-grid-tile>

    <md-grid-tile>
      B
    </md-grid-tile>

    <md-grid-tile>
      C
    </md-grid-tile>
  </md-grid-list>
</div>

TS:

@ViewChild('gridView') gridView;

  columnNum = 3;

  divSize = 900;

  setColNum(div){
    // console.log(div);
    if(this.gridView.nativeElement.offsetWidth < 400){
      this.columnNum = 1;
    }
    if(this.gridView.nativeElement.offsetWidth >= 400 
        && this.gridView.nativeElement.offsetWidth < 800){
      this.columnNum = 2;
    }
    if(this.gridView.nativeElement.offsetWidth >= 800){
      this.columnNum = 3;
    }
}

demo

完整视口:

是的,可以使用flex-layout.在我的测试中,我发现fxLayout api与md-grid-list不兼容,所以作为替代方案,我使用它的MediaChange,ObservableMedia功能来检测屏幕大小并根据它设置列号.

Edited Plunker,对于屏幕尺寸sm和xs,col尺寸更改为2和1.

HTML:

<md-grid-list [cols]="columnNum" 
              rowHeight="100px">
  <md-grid-tile>
    A
  </md-grid-tile>

  <md-grid-tile>
    B
  </md-grid-tile>

  <md-grid-tile>
    C
  </md-grid-tile>
</md-grid-list>

component.ts:

columnNum = 0;

constructor(media: ObservableMedia) {
  media.asObservable()
    .subscribe((change: MediaChange) => {
      // alert(change.mqAlias);  
      console.log(change.mqAlias);
      if(change.mqAlias == 'xs'){
        this.columnNum = 1;
      }
      else if(change.mqAlias == 'sm'){
        this.columnNum = 2;
      }
      else{
        this.columnNum = 3;
      }
    });
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读