小程序自定义弹出框效果

本文实例为大家分享了小程序自定义弹出框效果的具体代码,供大家参考,具体内容如下

my-pop----api:

title ------字符串---------自定义弹窗标题
context ------字符串---------自定义弹窗内容
cancelTxt ------字符串---------取消按钮文本
cancelCor ------字符串---------取消按钮颜色
inp ------布尔值---------true文本弹出框---------fasle默认弹出框
okTxt ------字符串---------确定按钮文字
okCor ------字符串---------确定按钮颜色

@cancel ------事件---------点击取消按钮事件可携带value参数
@ok ------事件---------点击确定按钮事件可携带value参数

//使用方法
//在目标文件json文件里引入该组件
"usingComponents": {
    "mypop":"/components/my-pop"
 }

<mypop id="mypop" context="测试一下主体" inp="{{true}}" bindok="ok"/>
//给组件一个id 
this.selectComponent("#mypop").openPop();   //打开弹窗
ok(e)  //点击确定触发 如果是inp类型弹窗 e 就是input的value , 反之e为空串
cancel(e) //点击取消触发  如果是inp类型弹窗 e 就是input的value  , 反之e为空串

弹窗js文件:

Component({
  /**
   * 组件的属性列表
   */
  properties: {
    title: {
      type: String,
      value: '默认标题', 
    },
    context: {
      type: String,
      value: '默认内容', 
    },
    inp:{
      type: Boolean,
      value: true
    },
    cancelTxt: {
      type: String,
      value: '取消', 
    },
    cancelCor:{
      type:String,
      value:'black'
    },
    okTxt: {
      type: String,
      value: '确认', 
    },
    okCor:{
      type:String,
      value:'red'
    },
  },

  /**
   * 组件的初始数据
   */
  data: {
    show:false,
    animation:'',
    animationPop:'',
    inpVal:''
  },

  methods: {
    bindinput(e){
      let {value} = e.detail
      this.setData({inpVal:value})
    },
    ok(){
      this.triggerEvent("ok",this.data.inpVal);
      this.hidePop()
      this.setData({inpVal:''})
    },
    cancel(){
      this.triggerEvent("cancel",this.data.inpVal);
      this.hidePop()
      this.setData({inpVal:''})
    },
    openPop(){
      var animation = wx.createAnimation({
          duration: 200,
          timingFunction: "linear",
          delay: 0
      })
      this.animation = animation
      animation.opacity(0).step()
      this.setData({
        animationData: animation.export(),
        show:true
      })
      setTimeout(function () {
          animation.opacity(1).step()
          this.setData({
              animationData: animation.export()
          })
      }.bind(this), 200)
    },
    hidePop(){
      var animation = wx.createAnimation({
          duration: 200,
          timingFunction: "linear",
          delay: 0
      })
      this.animation = animation
      animation.opacity(0).step()
      this.setData({
        animationData: animation.export()
      })
      setTimeout(function () {
          this.setData({
              show:false
          })
      }.bind(this), 200)
    }
  }
})

弹窗wxml文件:

<!--components/my-pop.wxml-->
<view>
  <view class="mask" animation="{{animationData}}" bindtap="hidePop" wx:if="{{show}}">
    <view class="content" animation="{{animationPop}}" catchtap >
      <view class="title">{{title}}</view>
      <view class="txt" wx:if="{{!inp}}">{{context}}</view>
      <view class="inp" wx:if="{{inp}}">
        <input type="text" value='{{inpVal}}' bindinput="bindinput" name="" id="" />
      </view>
      <view class="btnView">
        <view class="cancel" hover-class="op5" bindtap="cancel" style="color:{{cancelCor}}">{{cancelTxt}}</view>
        <view class="partition"></view>
        <view class="ok" hover-class="op5" bindtap="ok" style="color:{{okCor}}">{{okTxt}}</view>
      </view>
    </view>
  </view>
</view>

弹窗wxss文件:

.mask{
  width: 100%;
  height: 100vh;
  position: fixed;
  top: 0; left: 0;
  z-index: 100;
  background: rgba(0, 0, 0, 0.4);
  display: flex;
  align-items: center;
  justify-content: center;
}
.content{
  background: #FFFFFF;
  border-radius: 16rpx;
  width: 70%; 
}
.title{
  padding: 32rpx 0rpx;
  text-align: center;
  font-weight: 500;
    font-size: 32rpx;
    color: black;
}
.txt{
  color: #000000;
  font-size: 24rpx;
  text-align: center;
  margin-bottom: 32rpx;
}
.btnView{
  border-top: 1rpx solid #D4D6D8;
  display: flex;
  align-items: center;
  justify-content: space-around;
}
.cancel{
  width: 49%;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 80rpx; line-height: 80rpx;
}
.ok{
  width: 49%;
  display: flex;
  align-items: center;
  justify-content: center;
  height: 80rpx; line-height: 80rpx;
}
.inp{
    text-align: center;
    padding: 5px 0px;
        font-size: 24rpx;
        margin: auto;
        color: #868686;
        width: 90%;
        border: 1.2px solid #DEDEDE;
    border-radius: 5px;
    margin-bottom: 32rpx;
}
.op5{
  opacity: .5;
  background: rgba(0,0,0,0.05);
}
.partition{
  width: 2rpx;
  height: 80rpx;
  background: #D4D6D8;
}

弹窗json文件:

{
  "component": true,
  "usingComponents": {}
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 微信小程序实现弹出框提交信息

    本文实例为大家分享了微信小程序实现弹出框提交信息的具体代码,供大家参考,具体内容如下 <view class="navSm" bindtap="toolNo">       <image src="../../images/idx4.png" class="mavimg" mode="aspectFit"></image>       <view class=&qu

  • 微信小程序自定义底部弹出框功能

    本文实例为大家分享了微信小程序自定义底部弹出框的具体代码,供大家参考,具体内容如下 实现这么一个功能,点击选项进行选择,效果是从底部弹出选项框(带滑出动画),选择了某项或者点击其他地方,隐藏(带滑出动画).效果图如下: 可适用于任何场景,如普通选项(如图)或者类似商城小程序选择商品属性的弹出框.只需要把内容替换自己需要的即可. 1. wxml代码 <view class="wrap"> <view bindtap="showModal"> &

  • 微信小程序自定义底部弹出框

    本文实例为大家分享了微信小程序底部弹出框展示的具体代码,供大家参考,具体内容如下 效果图: html <view class="commodity_screen" bindtap="hideModal" wx:if="{{showModalStatus}}"></view> <view animation="{{animationData}}" class="commodity_attr

  • 微信小程序实现modal弹出框遮罩层组件(可带文本框)

    modal弹出框遮罩层可实现提示信息.验证码等功能 然而在官方文档已经删除了modal的页面,说要废弃modal 就个人而言modal组件无法被wx.showModal完全替代.大家都知道小程序的wxml的组件可以通过改变js的值实现重新渲染,而接口是无法实现的 有同感的也不止博主一个人 官方18-5-13的建议要实现此类功能也是用modal 属性 说下遮罩层实现,通过改变modal的hidden属性来控制是否显示,通过监听confirm方法来确认提交,通过bindinput来监听modal内表

  • 微信小程序实现底部弹出框

    微信小程序的底部弹出框,供大家参考,具体内容如下 wxml <!-- 弹出框 start --> <view class="dialog_screen" bindtap="hideModal" wx:if="{{showModalStatus}}"></view> <view animation="{{animationData}}" class="dialog_attr_b

  • 微信小程序商品详情页底部弹出框

    电商项目中商品详情页,加入购物车或者下单时可以选择商品属性的弹出框,通过设置view的平移动画,达到从底部弹出的样式 1.js代码(一般情况下只调用显示对话框的函数,当点击对话框外部的时候,对话框可以消失) //显示对话框 showModal: function () { // 显示遮罩层 var animation = wx.createAnimation({ duration: 200, timingFunction: "linear", delay: 0 }) this.anim

  • 微信小程序自定义可滚动的弹出框

    本文实例为大家分享了微信小程序自定义可滚动弹出框的具体代码,供大家参考,具体内容如下 最近在写一个装修的活动,规则是点击按钮弹出加上相应的动画. 首先我们需要一个按钮触发显示(如图,点击详细规则显示规则模态框,图二右边的滚动条在手机上不显示) 思路:小程序自己的模态框不能写样式,这是个比较尴尬的情况,这是一个比较小白的解决方案: 在前端写一个视窗,默认让它隐藏 我这边是用showModel来控制,默认给它false,当点击规则按钮是将showModel的值改为true,点击关闭按钮将showMo

  • 微信小程序自定义纯净模态框(弹出框)的实例代码

    由于官方API提供的模态框只能显示简单的文字,但是在实际应用场景中,我们需要模态框上能够显示各种各样的组件和样式,所以,以此为基础模拟出一套可以供大家自定义的纯净版的模态框,满足大家各式各样的需求. 效果图: WXML: <view class="modal-mask" bindtap="hideModal" catchtouchmove="preventTouchMove" hidden="{{!showModal}}"

  • 使用微信小程序开发弹出框应用实例详解

    view class="container" class="zn-uploadimg"> <button type="primary"bindtap="showok">消息提示框</button> <button type="primary"bindtap="modalcnt">模态弹窗</button> <button typ

  • 微信小程序自定义底部弹出框动画

    微信小程序之自定义底部弹出框动画,供大家参考,具体内容如下 最近做小程序时,会经常用到各种弹框.直接做显示和隐藏虽然也能达到效果,但是体验性太差,也比较简单粗暴.想要美美地玩,添加点动画还是非常有必要的.下面做一个底部上滑的弹框. wxml <view class="modals modals-bottom-dialog" hidden="{{hideModal}}"> <view class="modals-cancel" b

随机推荐