我的需求是:弹出框顶部有 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. 安装npm后,nrm ls报错问题

    一.nrm : 无法加载文件 E:\nodejs\nrm.ps1,因为在此系统上禁止运行脚本.有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135 ...

  2. Docker未授权漏洞(2375)

    漏洞验证 直接使用浏览器访问 http://ip:2335 http://ip:2335/version http://ip:2335/info docker -H tcp://ip:2375 ver ...

  3. Docker限制

    前言 Docker系列文章: 此篇是Docker系列的第十篇,大家一定要按照我做的Demo都手敲一遍,印象会更加深刻的,马上就开始Kubernetes,加油!一起前行! 为什么要学习Docker Do ...

  4. 痞子衡嵌入式:ARM Cortex-M内核那些事(9.1)- 存储保护(MPU - PMSAv6/7)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M存储保护模块(MPU). <ARM Cortex-M内核MCU开发那些事>的内核篇连载最早是 201 ...

  5. kali linux重启网卡失败:Job for networking.service failed because the control process exited with error code. See "systemctl status networking.service" and "journalctl -xe" for details. 问题排查

    linux菜鸡的时候,总是为了配置网络而烦恼,重启网卡的原因有很多,我这次是因为配置了固定IP[使用第三方工具连接]所以需要重启网卡,出现 Job for networking.service fai ...

  6. C++ 读 ,写 文件

    1 //文件操作 2 //文本文件 读 ,写文件 3 4 #include <iostream> 5 #include <string> 6 #include<fstre ...

  7. fiddler 之 返回数据乱码解决方法

    1.有时用fiddler抓包, 发现抓到的包, 发送数据和返回数据都是乱码, 怎么办?   直接上图  (这办法不是100%成功的) 方法一: 方法二:

  8. Unity 不规则按钮实现

    1.先重写Image类,实现对Image图形范围的重写: 2.对不规则按钮添加Polygon Collider2D组件,调整大小圈中要点击的范围: 3.将重写的Image类添加到不规则按钮上时,需要移 ...

  9. STP生成树的一些笔记

    一.STP概述 1.1.STP简介 交换网络环路主要由广播风暴.多帧复制和MAC地址表紊乱造成. 广播风暴:一个数据帧或包被传输到本地网段 (由广播域定义)上的每个节点就是广播:由于网络拓扑的设计和连 ...

  10. 阿里云云服务器 ECS和云数据库 PolarDB的简单使用

    阿里云云服务器 ECS和云数据库 PolarDB的简单使用 仅作为记录自己的操作使用,主要是怕自己太久不用都忘了 登录阿里云以后点击控制台 然后找到云服务器ECS,点击进入 在左侧找到实例,点击进入 ...