快利用promt.showDialog接口提供的弹框只能显示文字、按钮简略的元素,无奈实现简单的页面成果。但往往产品经理设计的弹框页面成果很炫,怎么办呢?

比方实现如下弹窗成果:展现一个列表,右边显示图片,左边显示具体介绍,见图1;提醒用户查看利用隐衷协定弹窗成果,外面内容有超链接成果,能点击,见图2:

 

图1  列表弹窗                                 图2  超链接弹窗

此问题个别是开发者对快利用组件、款式属性应用不相熟导致的。

解决办法

基于stack组件+position:fixed css款式能够实现自定义弹窗,弹窗显示暗藏基于if/show指令来管制,具体代码如下:

初始化数据模型:

` data() {

  return {    list: [1, 2, 3],    isShow: false,    ifShow1: false,    ifShow2: false  }},`

页面布局:

`<text onclick="showToast1">自定义弹窗款式1</text>

<text onclick="showToast2">自定义弹窗款式2</text><!-- 弹窗 --><div if="{{isShow}}" class="modal center-modal">  <div class="toast-box password-box">    <block>      <stack class="eyes-input-box">        <div style="flex-direction: column;width: 100%;" if="{{ifShow1}}">          <div style="width: 100%;">            <text style="font-size: 32px;font-weight: 500;">交通守法</text>            <text style="font-size: 25px;text-align: right;padding-left: 400px" onclick="hide">暗藏</text>          </div>          <list style="height: 550px">            <list-item type="list" for="list" style="height: 160px;margin-top: 20px">              <div style="padding-top: 1px;">                <image src="/Common/icon.png" style="border-radius: 100%;width: 100px;height: 100px;"></image>                <div style="flex-direction: column; margin-left: 20px">                  <text style="font-size: 28px;font-weight: 600;">二级题目</text>                  <text style="font-size: 26px;margin-top: 10px">相干内容展现,例如商品属性、价格、上架日期等信息展现</text>                  <div style="height: 2px;background-color:#808080;bottom: 0;margin-top: 25px" if="{{$idx<2}}">                </div>                </div>                              </div>            </list-item>          </list>        </div>        <div style="flex-direction: column;width: 100%;" if="{{ifShow2}}">          <text style="font-size: 31px;font-weight: 700;">城市服务</text>          <text style="font-weight: 400;"><span>点击“批准”,即示意您批准上述内容及</span><a style="color: #0000ff;" onclick="toast">利用名称的用户协定</a>            <span>、</span><a style="color: #0000ff;" onclick="toast">对于利用名称与隐衷的申明</a></text>          <div style="width: 100%;">          <text style="width: 50%; text-align: center; color: #0000ff;" onclick="hide">确认</text>          <text style="width: 50%; text-align: center; color: #0000ff;" onclick="hide">勾销</text>          </div>        </div>      </stack>    </block>  </div></div>`

页面款式:
`
.container {

flex-direction: column;justify-content: center;align-items: center;.body {    width: 100%;    height: 100%;    flex-direction: column;    align-items: center;    .img {        margin-top: 500px;    }    .txt {        margin-top: 570px;    }}// 弹窗款式

.modal {

position: fixed;flex-direction: column;justify-content: flex-end;width: 100%;height: 100%;padding: 0 34px 34px;background-color: rgba(0, 0, 0, 0.18);animation-name: Modal;animation-duration: 130ms;animation-timing-function: ease-in;.toast-box {  width: 100%;  padding: 25px 50px 20.8px;  border-radius: 34px;  background-color: white;  flex-direction: column;  .toast-title {    font-size: 41.6px;    line-height: 56px;    font-weight: 500;    font-family: HWtext-65ST;    color: #000000;  }  .toast-tip {    font-family: HWtext-55ST;    font-size: 29px;    color: rgba(0, 0, 0, 0.6);    line-height: 40px;    margin-top: 3.6px;    margin-bottom: 25px;  }  .label-box {    height: 100px;    border-bottom: 1px solid rgba(0, 0, 0, 0.1);    .label {      color: #000000;      width: 100%;      font-family: HWtext-55ST;      font-size: 34px;    }    input {      margin-right: -11px;    }  }  .manage {    height: 100px;    font-family: HWtext-65ST;    font-size: 29.12px;    color: #007dff;    font-weight: 500;  }  .cancel {    width: 100%;    height: 75px;    margin-top: 37.44px;    text-align: center;    font-family: HWtext-65ST;    font-size: 33.28px;    color: #007dff;    font-weight: 500;  }  .btn-box {    justify-content: space-between;    align-items: center;    .bind {      width: 47%;      height: 60px;      border-radius: 10px;      font-family: HWtext-65ST;      text-align: center;      font-size: 33.28px;      color: #007dff;      margin: 16px 0;      font-weight: 500;    }    .line {      height: 50px;      width: 1px;      background-color: rgba(0, 0, 0, 0.2);    }    .quit {      width: 47%;      height: 60px;      border-radius: 10px;      text-align: center;      font-family: HWtext-65ST;      font-size: 33.28px;      color: #007dff;      margin: 16px 0;      font-weight: 500;    }    .bind:active {      background-color: rgba(0, 0, 0, 0.1); // 待高保真批改    }    .quit:active {      background-color: rgba(0, 0, 0, 0.1); // 待高保真批改    }  }  .nocar-tip {    height: 99.84px;    font-size: 33.28px;    font-family: HWtext-55ST;    color: #000000;    border-bottom: 1px solid rgba(0, 0, 0, 0.1);  }}.password-box {  margin-top: -110px;  padding: 30.63px 50px 20.8px;  .toast-title {    height: 55.64px;    margin-bottom: 30.12px;  }  .password-tip {    flex-direction: column;    margin-top: 3.6px;    margin-bottom: 25px;    .control-tip {      font-family: HWtext-55ST;      font-size: 24.96px;      color: rgba(0, 0, 0, 0.6);    }  }  .error-password-tip {    font-family: HWtext-55ST;    font-size: 24.96px;    color: #fa2a2d;    height: 32.76px;    margin-bottom: 37.4px;    margin-top: 0;  }  .btn-box {    .bind {      margin-top: 8px;      margin-bottom: 8px;    }    .quit {      margin-top: 8px;      margin-bottom: 8px;    }  }  .eyes-input-box {    width: 100%;    flex-direction: row;    justify-content: flex-end;    .input-password {      width: 100%;      height: 94.64px;      border: 1px solid #ffffff;      border-bottom-color: #000000;      padding: 11.44px 0;      margin-bottom: 20.8px;    }    .password-text {      width: 100%;      height: 94.64px;      padding: 11.44px 0;      border-bottom: 1px solid #000000;      margin-bottom: 20.8px;      color: #000000;      font-size: 36px;    }    .eyes-img {      width: 49.92px;      height: 49.92px;      margin-top: 23px;    }  }  .password-loading-box {    flex-direction: row;    align-items: center;    justify-content: space-between;    height: 150px;    .loading-text {      font-family: HWtext-55ST;      font-size: 33.28px;      color: rgba(0, 0, 0, 0.96);    }    .loading-circular {      width: 102px;      height: 102px;      color: #666666;    }  }}

}
}
`

事件绑定:

`
showToast1() {

  this.isShow = true;  this.ifShow1 = true  this.ifShow2 = false},showToast2() {  this.isShow = true;  this.ifShow1 = false  this.ifShow2 = true},hide(){  this.isShow = false;},toast() {  prompt.showToast({    message: '查看隐衷协定'  })

}
`

欲了解更多详情,请参阅:

快利用开发领导文档:https://developer.huawei.com/consumer/cn/doc/development/quickApp-Guides/quickapp-whitepaper

快利用Style款式:

https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-style

快利用通用款式:

https://developer.huawei.com/consumer/cn/doc/development/quickApp-References/quickapp-common-settings#h1-1575449213432


原文链接:https://developer.huawei.com/...

原作者:Mayism