微信小程序弹出和隐藏遮罩层动画以及五星评分

参考源码:

http://www.see-source.com/weixinwidget/detail.html?wid=82

https://blog.csdn.net/pcaxb/article/details/56276180

https://developers.weixin.qq.com/miniprogram/dev/api/api-animation.html

train.wxml

<view class=‘train_con‘>

  <view class=‘head‘>
    <text>{{bankname}}</text>
    <text class=‘count‘>{{index+1}}/{{allquestion.length}}</text>
  </view>

<view bindtouchstart="touchStart" bindtouchend="touchEnd" style=‘width:100%;height:100%;display: flex;flex-direction: column;justify-content: center;align-items: center;‘>

  <view class=‘question_view‘>
    <text class=‘question_text‘>{{questionlist.question}}</text>

    <view class=‘option_view‘ data-id="A" bindtap="changeColor">

      <view class="letter_view {{letterid==‘A‘?‘active‘:‘‘}} {{errorid==‘A‘?‘error‘:‘‘}}">
        <text class=‘letter‘>A</text>
      </view>

      <view class=‘option_text_view‘ >
       <text class=‘option_text‘>{{questionlist.choiceA}}</text>
      </view>
    </view>

    <view class=‘option_view‘  data-id=‘B‘ bindtap="changeColor">

      <view class="letter_view {{letterid==‘B‘?‘active‘:‘‘}} {{errorid==‘B‘?‘error‘:‘‘}}">
        <text class=‘letter‘>B</text>
      </view>

      <view class=‘option_text_view‘>
       <text class=‘option_text‘>{{questionlist.choiceB}}</text>
      </view>
    </view>

    <view class=‘option_view‘  data-id=‘C‘ bindtap="changeColor">
      <view class="letter_view  {{letterid==‘C‘?‘active‘:‘‘}} {{errorid==‘C‘?‘error‘:‘‘}}">
        <text class=‘letter‘>C</text>
      </view>

      <view class=‘option_text_view‘>
        <text class=‘option_text‘>{{questionlist.choiceC}}</text>
      </view>
    </view>

    <view class=‘option_view‘  data-id=‘D‘ bindtap="changeColor">
      <view class="letter_view {{letterid==‘D‘?‘active‘:‘‘}} {{errorid==‘D‘?‘error‘:‘‘}}">
        <text class=‘letter‘>D</text>
      </view>

      <view class=‘option_text_view‘>
        <text class=‘option_text‘>{{questionlist.choiceD}}</text>
      </view>
    </view>

  </view>
<!-- 答案解析 -->
  <view>
    <view class="analysis_view {{clickcheckid==1?‘checked2‘:‘‘}}">
      <text>参考答案:{{questionlist.answer}}\n参考解析:{{questionlist.analysis}}</text>
    </view>
  </view>

  <view class="checkanswer_view {{clickcheckid==1?‘checked‘:‘‘}}" bindtap=‘checkanswer_click‘>
    <text>查看答案</text>
  </view>
  </view>

<!-- 透明遮盖层,用于退出评分层 -->
  <view  bindtap="hideModal" animation="{{animationData}}" class="touming_top" wx:if="{{showModalStatus}}">
  </view>  

  <!-- 评分遮盖层 -->
<view animation="{{animationData}}" class="container-column buydes-dialog-container" wx:if="{{showModalStatus}}">
    <view class="buydes-dialog-container-top">这道题对你有用吗?评个分吧</view>
    <view class="container-column buydes-dialog-container-bottom">
      <!-- 评分 -->
      <block wx:for="{{stars}}">
        <image class="star-image" style="left: {{item*80+185}}rpx" src="{{key > item ?selectedSrc : normalSrc}}">
          <view class="item" style="left:0rpx" data-key="{{item+1}}" bindtap="selectRight"></view>
        </image>
      </block>
      <view class="mark_btn" bindtap=‘mark_click‘>
        <text>确定</text>
      </view>
    </view>
  </view>

<!-- 透明遮盖层,用于退出评分层 -->
  <view  bindtap="hideModal" animation="{{animationData}}" class="touming" wx:if="{{showModalStatus}}">
  </view>    

<!-- 底部栏 -->
  <view class=‘leftandright‘>

    <view class=‘bottom_view‘ bindtap="showModal" >
      <image class="bottom_image" src=‘../images/score.png‘></image>
    </view>

    <view class=‘bottom_view‘ bindtap=‘nextquestion_click‘>
       <image class="bottom_image" src=‘../images/comment.png‘></image>
    </view>

    <button style="color: #fff; width: 80rpx;height: 80rpx;background-color: #fff;padding:0rpx;          margin-left:0rpx;margin-right:0rpx;padding-left:0px;padding-right:0px;" id="shareBtn"               open-type="share" class=‘share_btn‘>
      <image class="bottom_image" src=‘../images/share.png‘></image>
    </button>

  </view>

</view>

train.js

var interval = "";//周期执行函数的对象
var time = 0;//滑动时间
var touchDot = 0;//触摸时的原点
var flag_hd = true;//判定是否可以滑动

let animationShowHeight = 300;//动画偏移高度

Page({

  /**
   * 页面的初始数据
   */
  data: {

    // 遮罩层变量
    animationData: "",
    showModalStatus: false,
    imageHeight: 0,
    imageWidth: 0,

    // 评分变量
    stars: [0, 1, 2, 3, 4],//评分数值数组
    normalSrc: ‘../images/score.png‘,//空心星星图片路径
    selectedSrc: ‘../images/fullstar.png‘,//选中星星图片路径
    key: 0,//评分
  },

  //点击星星
  selectRight: function (e) {
    var key = e.currentTarget.dataset.key
    console.log("得" + key + "分")
    this.setData({
      key: key
    })
  },

  // 确定评分
  mark_click: function () {
    this.hideModal()
  },

 // 显示遮罩层
  showModal: function () {
    //创建一个动画实例animation。调用实例的方法来描述动画。
    var animation = wx.createAnimation({
      duration: 500,         //动画持续时间500ms
      timingFunction: "ease",//动画以低速开始,然后加快,在结束前变慢
      delay: 0               //动画延迟时间0ms
    })
    this.animation = animation
    //调用动画操作方法后要调用 step() 来表示一组动画完成
    animation.translateY(animationShowHeight).step()//     在Y轴向上偏移300
    this.setData({
      //通过动画实例的export方法导出动画数据传递给组件的animation属性。
      animationData: animation.export(),
      showModalStatus: true  //显示遮罩层
    })
    setTimeout(function () {
      animation.translateY(0).step()
      this.setData({
        animationData: animation.export()
      })
    }.bind(this), 1)
  },

  // 隐藏遮罩层
  hideModal: function () {
    var animation = wx.createAnimation({
      duration: 500,
      timingFunction: "ease",
      delay: 0
    })
    this.animation = animation;
    animation.translateY(animationShowHeight).step()
    this.setData({
      animationData: animation.export(),
    })
    setTimeout(function () {
      animation.translateY(0).step()
      this.setData({
        animationData: animation.export(),
        showModalStatus: false
      })
    }.bind(this), 200)
  },

  // 评分按钮
  score_click: function () {

  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    flag_hd = true;    //重新进入页面之后,可以再次执行滑动切换页面代码
    clearInterval(interval); // 清除setInterval
    time = 0;
    let that = this;
    wx.getSystemInfo({
      success: function (res) {
        animationShowHeight = res.windowHeight;
      }
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

})

train.wxss

page {
  background-color: #fff;
}

/* -----------------评分遮罩层----------------- */

/* 分享按钮 */

.share_btn::after {
  border: none;
}

/* 整个评分遮罩层 */

.buydes-dialog-container {
  width: 100%;
  height: 300rpx;
  justify-content: space-between;
  background-color: #fff;
  position: fixed;
  bottom: 101rpx;
  /* z-index: 998;   */
  border-top: 1rpx solid #e8e8e8;
}

/* 评分遮罩层顶部 */

.buydes-dialog-container-top {
  height: 100rpx;
  padding-top: 20rpx;
  display: flex;
  justify-content: center;
  flex-grow: 1;
  font-size: 32rpx;
  color: #737373;
}

/* 评分遮罩层底部 */

.buydes-dialog-container-bottom {
  height: 150rpx;
  padding-top: 20rpx;
  background-color: #fff;
  display: flex;
  justify-content: center;
  flex-grow: 0;
}

/* 空心的星星图片 */

.star-image {
  position: absolute;
  top: 100rpx;
  width: 60rpx;
  height: 60rpx;
  src: "../../images/score.png";
}

/* 触发评分点击的区域 */

.item {
  position: absolute;
  top: 0rpx;
  width: 60rpx;
  height: 60rpx;
}

/* 确认评分按钮 */

.mark_btn {
  width: 100%;
  height: 100rpx;
  background-color: #fff;
  color: #55c5ac;
  display: flex;
  justify-content: center;
  align-items: center;
  border-top: 1rpx solid #eaeaea;
  margin-top: 60rpx;
  margin-bottom: 150rpx;
  font-size: 32rpx;
}

/* 透明遮罩层(上) */

.touming_top {
  width: 100%;
  height: 900rpx;
  opacity: 0;
  position: fixed;
  bottom: 402rpx;
  z-index: 998;
}

/* 透明遮罩层(下) */

.touming {
  width: 100%;
  height: 101rpx;
  opacity: 0;
  position: fixed;
  bottom: 0rpx;
  z-index: 998;
}

原文地址:https://www.cnblogs.com/benbencyb/p/8998717.html

时间: 2024-12-11 07:04:44

微信小程序弹出和隐藏遮罩层动画以及五星评分的相关文章

使用movable-view制作可拖拽的微信小程序弹出层效果。

仿了潮汐睡眠小程序的代码.[如果有侵权联系删除 最近做的项目有个弹出层效果,类似音乐播放器那种.按照普通的做了一般感觉交互不是很优雅,设计妹子把潮汐睡眠的弹层给我看了看,感觉做的挺好,于是乘着有空仿照了一下. 首先善用度娘反编译弄到了源码,但是打不开.然后自己研究源码发现他们用的是movable-view实现的. 于是仿照着搭出了基础框架. 新建了个组件 wxml <!--components/playpanel/playpanel.wxml--> <movable-area style

微信小程序弹出可填写框两种方法

方法一: html页面: < view class = "container" class = "zn-uploadimg" > < button type = "primary" bindtap = "modalinput" > modal有输入框 < /button> </view > < modal id = "modal" hidden = &q

微信小程序弹出层

1.消息提示     wx.showToast wx.showToast({ title: '成功', icon: 'success', duration: 2000 }) 2.模态弹窗 wx.showModal wx.showModal({ title: '提示', content: '这是一个模态弹窗', success (res) { if (res.confirm) { console.log('用户点击确定') } else if (res.cancel) { console.log(

微信小程序 - 弹出层组件

需要的可以下载示例:maskalert 原文地址:https://www.cnblogs.com/cisum/p/10421741.html

微信小程序-06-详解介绍.js 逻辑层文件-注册页面

上一篇介绍的是 app.js 逻辑层文件中注册程序,对应的每个分页面都会有的 js 文件中 page() 函数注册页面 微信小程序-06-详解介绍.js 逻辑层文件-注册页面 宝典官方文档: https://developers.weixin.qq.com/miniprogram/dev/framework/MINA.html 今天开始深度学习编程语法,虽然大部分是拷贝官方文档,代码类都是我自己敲的,希望能自己敲一遍表格里的内容,熟悉一下操作 页面 Page Page(Object) Page(

点击弹出居中的遮罩层,背景变暗

点击弹出层特效代码,网页上已经有很多类似的代码了,使用挺广泛的,代码先判断浏览器的版本,ie6创建的div样式和非ie6创建的div样式在解析时有点区别,为了兼容性考虑,才加了判断,虽然实现的有点粗糙,不过从实现的方法来说,容易理解,便于修改完善. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio

android开发步步为营之51:弹出窗及遮罩层的几种实现方式

需要做一个弹出窗或者遮罩层,我们一般有以下几种思路. 1.AlertDialog对话框 2.PopupWindow弹出窗 3.WindowManager动态添加View到当前页面 4.打开另外一个Activity 下面分别给出这几种方法的实现栗子. 一.AlertDialog 适合需要用户做出选择,或者确认的弹出小窗 AlertDialog.Builder dialog = new AlertDialog.Builder(TestActivity.this); //自定义 //dialog.se

element-ui 弹出框在遮罩层下面

title: element-ui 弹出框在遮罩层下面 date: 2020-03-18 11:37:45 tags: elementUI 给 <el-dialog></el-dialog>添加:modal-append-to-body="false"属性 <el-dialog title="提示" :visible.sync="isDialogShow" :modal-append-to-body="fa

极限工坊淘小咖:各大电商平台陆续入驻微信小程序,背后到底隐藏着什么?

微信小程序是一个低门槛的平台,一个巨大流量的平台,一个相对公平的优质平台,随着微信小程序的盈利风口已经开启了,很多电商平台也开始争相入驻小程序,要知道做电商最重要的是流量,背靠着10亿微信用户,附近的店功能,公众号的跳转,几十个微信入口.拼团,优惠券,秒杀等等这些传统电商的营销手段,在小程序都可以做到.那么开发一个小程序后能带来什么价值呢?淘小咖总结以下几点供大家参考.1.央视的连续报道小程序在岗上线的时候就被央视报道,像第一批发布的"小程序"至少有上百个,覆盖了各行各业的领域.而不久