我的需求是:弹出框顶部有 title,底部有确认和取消按钮。这两部分固定,中间部分 content 的高度随自身内容会动态增长,但是它最大高度不能超过父节点 bg 的 80%,而父节点 bg 的高度也是随自身内容动态变化,但最大高度又不能超过其父 cover 的 80%

<template>
<view v-if="showHello" :class="['cover', ani]" @tap.stop="show(false)">
<view :class="['bg', 'translateCenter', ani]" @tap.stop="clear">
<view class="title">
{{title}}
</view>
<view class="content">
<slot />
</view>
<view class="btn" >
<button class="btn-item" type="default" @tap="show(false)">取消</button>
<button class="btn-item" type="primary" @tap="confirm">确定</button>
</view>
</view>
</view>
</template> <script>
export default {
name: "helloPopup",
props: {
title: {
type: String,
default: 'title',
},
},
watch: {
title(newValue, oldValue) {
console.log('title:', newValue, oldValue)
},
},
created(e) {},
data(){
return {
showHello: false,
ani: '',
}
},
methods: {
show(b){
if(b){
this.showHello = true
this.$nextTick(() => {
setTimeout(() => {
this.ani = 'ani'
}, 30)
})
}else{
this.ani = ''
this.$nextTick(() => {
setTimeout(() => {
this.showHello = false
}, 300)
})
}
},
clear(){},
confirm(){
this.$emit('confirm')
},
},
}
</script> <style>
@charset "UTF-8"; *{margin:0;padding:0}
.translateCenter{ position: absolute; left:50%; top:50%; transform:translate(-50%,-50%); }
.cover{
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 99999;
background: rgba(0, 0, 0, .4);
opacity: 0;
transition: all .3s;
}
.cover.ani{
opacity: 1;
}
.bg{
max-height: 3%;
width: 3%;
opacity: 0; transition: all .3s;
}
.bg.ani{
max-height: 80%;
width: 80%;
opacity: 1; display: flex;
flex-direction: column;
background-color: #FFFFFF; border-radius: 16upx;
padding: 24upx 24upx;
overflow: hidden;
}
.content{
width: 100%;
max-height: 80%;
overflow:auto;
}
.title{
text-align: center;
font-size: 38upx;
}
.btn{
display: flex;
flex-direction: row;
justify-content: center; align-items: center;
align-content: center; vertical-align: middle;
margin-top: 40upx;
margin-bottom: 20upx;
/* background-color: #00CE47; */
}
.btn.btn-item{
flex: auto;
max-width: 40%;
}
</style>

如此这般调用:

<template>
<view>
<button @tap="show">你敢点我吗</button> <hello-popup ref="fuck" :title="popuptitle" @confirm="onConfirm">
<block v-for="(v,index) in 10" :key="index">
<view>item {{index}}</view>
</block>
<view>
备注:备注,备注,备注,备注,备注
</view>
</hello-popup>
</view>
</template> <script>
import helloPopup from '@/components/hello-popup/hello-popup.vue' export default {
components: {
helloPopup,
},
data() {
return {
popuptitle: '',
}
},
methods: {
show(){
this.popuptitle = "hangj.cnblogs.com" this.$refs.fuck.show(true)
},
onConfirm(e){
console.log('confirmed!')
this.$refs.fuck.show(false)
},
}
}
</script> <style>
</style>

欢迎留言~

uni-app 入门小白纯徒手编写组件 hello-popup的更多相关文章

  1. Angular2入门系列教程3-多个组件,主从关系

    上一篇 Angular2项目初体验-编写自己的第一个组件 好了,前面简单介绍了Angular2的基本开发,并且写了一个非常简单的组件,这篇文章我们将要学会编写多个组件并且有主从关系 现在,假设我们要做 ...

  2. 纯Swift编写的仿“随遇”应用源码

    纯Swift编写的仿“随遇”App概述 此项目是为了巩固Swift掌握而编写的,素材均来自“随遇”官方App 用Storyboard+Xib+Autolayout的方式来实现UI部分 由于项目不复杂, ...

  3. 为Node.js编写组件的几种方式

    本文主要备忘为Node.js编写组件的三种实现:纯js实现.v8 API实现(同步&异步).借助swig框架实现. 关键字:Node.js.C++.v8.swig.异步.回调. 简介 首先介绍 ...

  4. 纯代码编写qt登录界面(转)

    1. 新建Qt Widgets Application,项目名称为login1,在类信息页面保持类名和基类为MainWindow和QMainWindow不变,取消选择创建界面选项,如下图所示.     ...

  5. Jmeter Web 性能测试入门 (三):Jmeter 常用组件说明

    线程组:用来设置并发的数量和模式.是用来模拟用户并发的组件.JMeter 的每个任务都是用线程来处理的. 线程数:要并发的请求数量. Ramp-Up Period: 在多次时间内把这些并发的请求发送完 ...

  6. vue3.0入门(四):组件

    组件 组件基础 <my-counter></my-counter> const app = Vue.createApp({ // 根组件 data() { return {} ...

  7. electron 入门小白贴

    electron 入门小白贴 electron demo 跑起来! 毕设准备是做个 跨平台的做题的客户端,打算用 electron 来弄. 然而今天折腾了半天才终于吧demo给跑起来了.经历了许多的问 ...

  8. Bootstrap入门(二十一)组件15:警告框

    Bootstrap入门(二十一)组件15:警告框 通过这些简单.灵活的进度条,为当前工作流程或动作提供实时反馈. 进度条组件使用了 CSS3 的 transition 和 animation 属性来完 ...

  9. Bootstrap入门(二十)组件14:警告框

    Bootstrap入门(二十)组件14:警告框 警告框组件通过提供一些灵活的预定义消息,为常见的用户动作提供反馈消息,提示.通知或者警示,可以迅速吸引注意力. 1.情景警告框 2.可关闭的警告框 3. ...

随机推荐

  1. Easyui设置easyui-textbox不可编辑

    转载自:https://blog.csdn.net/qq_23113521/article/details/78801689 在easyui里由于easyui-textbox被封装,通过一般的jque ...

  2. 构建前端第12篇之---在Vue中对组件,变量,函数的全局引入

    张燕涛写于2020-01-16 星期two 本篇还是源于import和export的使用,昨天看es6入门 和MDN文档,大体上用法了解了,但今天看ElementUI源码的时候,看到 //src/in ...

  3. 右键发送 (sendto),创建快捷方式到自定义的位置,不仅仅是复制,就像 发送到 桌面快捷方式 一样

    TL;DR 在 SendTo 文件夹里加上一文件夹的快捷方式后,在右键发送到这个文件夹的是这些文件的一个副本,实际上是一个复制的过程,有时候我们只希望是快捷方式,那就得另想办法了. 方案如下: 创建一 ...

  4. Java预科:DOS命令及电脑快捷键

    Java预科:DOS命令及电脑快捷键 1.快捷键 常用快捷键 a/t +f4关闭窗口 cmd窗口打开快捷方式 1.开始+系统+命令提示符 2.win+r 输入cmd 3.在任意文件夹下面,按住shif ...

  5. HttpRunner3源码阅读:7.响应后处理 response.py

    response 上一篇说的client.py来发送请求,这里就来看另一个response.py,该文件主要是完成测试断言方法 可用资料 jmespath[json数据取值处理]: https://g ...

  6. Java面向对象12——static详解

    static  package oop.demon01.demon07; ​ // static : public class Student { ​     private static int a ...

  7. i春秋-Phone number(union注入+hex转码)

    记一道union注入语句转十六进制的注入题. 这个网站的基本功能就是可以找出跟你用户名相同的注册的人数. 注册登录给了两个显位. 点击check可以显示出有多少人和你用户名相同. 同时在这个页面的源代 ...

  8. RHCSA_DAY02

    Linux:一切皆文件 分区:/boot:做引导盘 /swap:虚拟内存----最大20gb /data:自己放文件用 /:根分区 - 图形界面:   - Ctrl+Shift +号   //调整命令 ...

  9. 蓝桥杯练习-各大OJ平台介绍

    校赛准备的不够充分,简单题失分太遗憾, 有幸参加到省赛,这次先码一下练习平台,等学期结束忙完之后好好练习! 1.题库与网站资源题库-在线提交系统(Online Judge)简介   下面是几个比较大的 ...

  10. xml的约束

    一.DTD约束xml 1.约束介绍 由于xml的标签由用户自己定义,因此在开发的时候,每个人都可以根据自己的需求来定义xml标签,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml ...