Angular+ionic2 控制键盘开启和关闭状态下的页面样式
问题描述:在手机端输入框获取焦点,键盘开启的状态会遮蔽输入框;
解决:键盘开启时,页面整体往上移动,关闭时再恢复原本样式。
步骤一:设置页面监听;
import { Component, ViewChild, ElementRef } from '@angular/core'; import { NavController, NavParams, IonicPage, ViewController, Content } from 'ionic-angular'; import { MsgBarService } from '../../../common/msg-bar'; import { UserService } from '../user.service'; import { Observable } from 'rxjs'; @IonicPage({ name: 'LoginIn', segment: 'LoginIn' }) @Component({ selector: 'page-login-in', templateUrl: 'login-in.html', }) export class LoginInPage { userNum; password; height = 0;//通过该值记录键盘的状态 keyboardOpenCSS:boolean=false;//控制键盘开启和关闭时的样式 constructor( public navCtrl: NavController, public navParams: NavParams, private msg: MsgBarService, public viewCtrl: ViewController, private service: UserService) { } ionViewDidLoad() { Observable.fromEvent(window, 'resize').subscribe((event) => { let _height = window.innerHeight; if (this.height == 0) { //初始化,键盘开启 this.keyboardOpenCSS=true; this.height = _height; } else if (_height > this.height) { //键盘关闭 this.keyboardOpenCSS=false; } else { //键盘开启 this.keyboardOpenCSS=true; } }) } userNameFun() { if (!this.userNum) { return; } if (isNaN(this.userNum)) { //截掉非数值字符 this.userNum = this.userNum.substring(0, this.userNum.length - 1); } } }
步骤二:html代码
<ion-header> <ion-navbar color="primary"> <ion-title>鸿翔移动应用</ion-title> </ion-navbar> </ion-header> <ion-content padding> <div [ngClass]="{keyboardOpenCSS: keyboardOpenCSS}"> <ion-list class="login_top"> <h1>云南鸿翔一心堂</h1> <p class="login_top_sys">移动业务系统</p> <p class="login_top_ver">v3.0</p> </ion-list> <ion-list> <ion-item> <ion-label>工号:</ion-label> <ion-input (keyup)="userNameFun()" type="text" placeholder="请输入7位工号" maxlength="7" [(ngModel)]="userNum"></ion-input>
</ion-item> <ion-item> <ion-label>密码:</ion-label> <ion-input type="password" placeholder="请输入登录密码" [(ngModel)]="password"></ion-input> </ion-item> </ion-list> <button ion-button full (click)="login()">登录</button>
<div class="footer">@Right 2018</div>
</div> </ion-content>
备注:
①<ion-input>的maxlength属性在类型为text下有效,在number或tel等数值类型下无效。
步骤三:CSS样式
.footer { position: fixed; bottom: 0px; height: 45px; width: 100px; line-height: 45px; text-align: center; left: 50%; margin-left: -50px; } .keyboardOpenCSS { margin-top: -190px; .footer { display: none; } }
以上。
【富潤屋,徳潤身】