微信小程序之自定义toast弹窗

微信小程序里面的自带弹窗icon只有两种,success和loading。有时候用户输入错误的时候想加入一个提醒图标,也可以使用wx.showToast中的image来添加图片达到使用自定义图标的目的;但是如果图标是字体,或者提醒的内容有很长捏(小程序中提醒的内容最多只能设置7个字,多了会被隐藏),那就只有自定义toast弹窗了;

第一步:新建一个wxml文件用来装模板,方便以后使用,比如

然后在这里面添加模板代码

<template name="toast">        //name相当于模板的标识,引用的时候好判断引用哪一个
     <view class=‘toast-out‘ wx:if=‘{{isShow}}‘>    //wx:if是条件渲染,使用这个是为了好判断是否显示或隐藏toast
         <view class=‘toast-in‘>      
             <span  class=‘iconfont {{iconClass}}‘></span>      //使用的阿里字体图标,根据传入的class值改变显示的图标
             <view class=‘toast-txt‘>
                 {{txt}}          //需要显示的提醒内容
             </view>
         </view>
     </view>
</template>

第二步:定义toast的样式

.toast-out {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 9999;
  width: 100%;
  height: 100%;
  display: flex;             //小程序中多使用flex布局,很方便的
  justify-content: center;  
  align-items: center;
}
.toast-out .toast-in {
  min-width: 100px;
  background: rgba(0, 0, 0, 0.7);
  padding: 6px;
  text-align: center;
  color: white;
  border-radius: 8px;
}
.toast-out .toast-in span {
  font-size: 30px;
}
.toast-out .toast-in .toast-txt {
  font-size: 14px;
}

第三步:在需要弹窗的页面import那个toast模板页面:

<import src="../../public/html/template.wxml" />

    备注:../是指返回上一层目录即父目录,两个../即返回到父目录的父目录。/是根目录,绝对路径。这里也可以使用绝对路径

    然后再在这个页面任何地方引用模板

<template is="toast" data="{{txt,isShow,iconClass}}"></template>

第四步:在引入弹窗页面的js中

    在page的data里先定义  isShow:false //默认隐藏的  但是我有点奇怪的是,不定义这个属性,注释掉,都能正常的隐藏与显示。

      然后定义一个显示弹窗的函数

toastShow:function(str,icon){
    var _this = this;
    _this.setData({
        isShow: true,
        txt: str,
        iconClass:icon
    });
    setTimeout(function () {    //toast消失
        _this.setData({
            isShow: false
        });
    }, 1500);
}

    然后在需要toast弹窗显示的事件里调用该事件就行了,比如:

log_btn:function(){
    var name=this.data.userName;if(name==""){
        this.toastShow(‘登录名不能为空‘,"icon-suo");
    }
}

结果:

图标随意弄的。。。

连接:小程序使用阿里字体图标

总结: 和HTML不一样,小程序中wx:if条件渲染就可以实现隐藏与显示的wx:if="false"就是隐藏,true就是显示。

   使用display:flex弹性盒子布局很方便,就比如上面弹窗的水平与垂直居中,只要设置两个属性就可以了。不用再像以前一样还需要设置其它的一堆,以前水平垂直居中的方法

补充:

  justify-content 的可选属性有:flex-start(全靠左),flex-end(全靠右),center(居中),space-between,space-around,initial(从父元素继承该属性)

  可查看效果:http://www.runoob.com/try/playit.php?f=playcss_justify-content&preval=flex-start

  align-items 的可选属性有:stretch,center,flex-start,flex-end,baseline(处于同一条基线),initial(设置为默认值),inherit(从父元素继承该属性)

  可查看效果:http://www.runoob.com/try/playit.php?f=playcss_align-items&preval=baseline

时间: 2024-10-22 19:38:25

微信小程序之自定义toast弹窗的相关文章

微信小程序之自定义模态弹窗(带动画)实例

1.基本需求. 实现用户自定义弹框 带动画(动画可做参靠,个人要是觉得不好看可以自定义动画) 获取弹出框的内容,自定义事件获取 2.案例目录结构 二.程序实现具体步骤 1.弹框index.wxml代码 <!--button--> <view class="btn" bindtap="powerDrawer" data-statu="open">来点我呀</view> <!--mask--> <

微信小程序之自定义tabbar

0. 官方指南 # 由于微信小程序的异步机制,页面跳转会出现随机事件 # 目的: 解决认证跳转过程的不友好体验 https://developers.weixin.qq.com/miniprogram/dev/framework/ability/custom-tabbar.html 1. app.json文件的处理 1. 添加:"custom": true,使用自定义的tabbar 2. 将非tabbar的内容删除,删除的示例是发布,如下: "tabBar": {

微信小程序封装自定义弹窗

最近在做小程序的登录,需要同时获取用户手机号和头像昵称等信息,但是小程序又不支持单个接口同时获取两种数据,因此想到自定义一个弹窗,通过弹窗按钮触发获取手机号事件.记录一下. 具体代码如下: 业务代码中: 在业务代码中引入dialog组件即可 <dialog visible="{{dialogVisible}}" showFooter="{{footerVisible}}" title="测试一下"> <view class='d

微信小程序覆盖自定义组件样式

小程序官方文档明确指出,引入的第三方自定义组件,是不可以对其进行CSS样式覆盖的,但是我们还想要修改怎么办呢?自定义组件时会之定义个外部类,通过这个外部类来修改样式. 修改https://weapp.iviewui.com/所提供的组件样式为例,它定义了一个外部类接口: 1. 通过第三方组件给出的externalClasses: ['i-class'],来指定自己的样式类 自己的wxml i-class="myrate" <i-rate i-class="myrate&

微信小程序版本自动更新弹窗提示

代码如下: onLaunch () { if (wx.canIUse('getUpdateManager')) { const updateManager = wx.getUpdateManager() updateManager.onCheckForUpdate(function (res) { if (res.hasUpdate) { updateManager.onUpdateReady(function () { wx.showModal({ title: '更新提示', content

微信小程序开发---自定义组件

开发者可以将页面内的功能模块抽象成自定义组件,以便在不同的页面中重复使用:也可以将复杂的页面拆分成多个低耦合的模块,有助于代码维护.自定义组件在使用时与基础组件非常相似. 创建自定义组件 类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成.要编写一个自定义组件,首先需要在 json 文件中进行自定义组件声明(将 component 字段设为 true 可这一组文件设为自定义组件):同时,还要在 wxml 文件中编写组件模板,在 wxss 文件中加入组件样式,它们的写法

微信小程序picker-view自定义日期时间等

picker-view 可以自定义地区时间什么的,其实主要是可以修改样式啦. <view class='login-user border-none' bindtap='data_click'> <view class='user-t'>生日</view> <view class='user-i'> <input placeholder="请输入生日" disabled value='{{birthday}}' /> <

微信小程序里自定义组件,canvas组件没有效果

methods: { /** * el:画圆的元素 * r:圆的半径 * w:圆的宽度 * 功能:画背景 */ drawCircleBg: function (el, r, w) { const ctx = wx.createCanvasContext(el); ctx.setLineWidth(w);// 设置圆环的宽度 ctx.setStrokeStyle('#E5E5E5'); // 设置圆环的颜色 ctx.setLineCap('round') // 设置圆环端点的形状 ctx.begi

微信小程序之购物数量加减 —— 微信小程序实战商城系列(3)

我们在购买宝贝的时候,购物的数量,经常是我们需要使用的,如下所示: 在宝贝详情页里: 在购物车里: 现在就为大家介绍这个小组件,在小程序中,该如何去写 下图为本项目的图: wxml: <!-- 主容器 --> <view class="stepper"> <!-- 减号 --> <text class="{{minusStatus}}" bindtap="bindMinus">-</text&