2020-12-30

博客园Logo
首页
新闻
博问
专区
闪存
班级

代码改变世界
搜索
注册
登录
返回主页
web前端项目案例实战
交流分享前端(移动端|微信端|小程序)最新技术、知识、项目案例…
博客园 首页 新随笔 联系 订阅 管理随笔 - 50 文章 - 0 评论 - 70
vue3系列:vue3.0自定义弹框组件V3Popup|vue3.x手机端弹框组件
基于Vue3.0开发的轻量级手机端弹框组件V3Popup。

之前有分享一个vue2.x移动端弹框组件,今天给大家带来的是Vue3实现自定义弹框组件。

V3Popup 基于vue3.x实现的移动端弹出框组件,集合msg、alert、dialog、modal、actionSheet、toast等多种效果。支持20+种自定义参数配置,旨在通过极简的布局、精简的调用方式解决多样化的弹框场景。

v3popup 在开发之初参考借鉴了Vant3、ElementPlus等组件化思想。并且功能效果和之前vue2.0保持一致。

◆ 快速引入

在main.js中全局引入v3popup组件。

复制代码
import { createApp } from ‘vue’
import App from ‘./App.vue’

const app = createApp(App)

// 引入弹窗组件v3popup
import V3Popup from ‘./components/v3popup’

app.use(V3Popup)
app.mount(’#app’)
复制代码
v3popup同样支持标签式+函数式两种调用方式。

标签写法
复制代码
<v3-popup
v-model=“showDialog”
title=“标题”
content=“

这里是内容信息!


type=“android”
shadeClose=“false”
xclose
:btns="[
{text: ‘取消’, click: () => showDialog=false},
{text: ‘确认’, style: ‘color:#f90;’, click: handleOK},
]"
@success=“handleOpen”
@end=“handleClose”
/>
<template #content>这里是自定义插槽内容信息!

复制代码
函数写法
复制代码
let e l = t h i s . el = this. el=this.v3popup({
title: ‘标题’,
content: ‘

这里是内容信息!

’,
type: ‘android’,
shadeClose: false,
xclose: true,
btns: [
{text: ‘取消’, click: () => { $el.close(); }},
{text: ‘确认’, style: ‘color:#f90;’, click: () => handleOK},
],
onSuccess: () => {},
onEnd: () => {}
})
复制代码
Vue3.0中挂载全局函数有2种方式 app.config.globalProperties app.provide

通过 app.config.globalProperties.$v3popup = V3Popup 方式挂载。

复制代码
// vue2.x中调用
methods: {
showDialog() {
this.$v3popup({…})
}
}

// vue3.x中调用
setup() {
// 获取上下文
const { ctx } = getCurrentInstance()
ctx.$v3popup({…})
}
复制代码
通过 app.provide(‘v3popup’, V3Popup) 方式挂载。

复制代码
// vue2.x中调用
methods: {
showDialog() {
this.v3popup({…})
}
}

// vue3.x中调用
setup() {
const v3popup = inject(‘v3popup’)

const showDialog = () => {
    v3popup({...})
}

return {
    v3popup,
    showDialog
}

}
复制代码
不过vue.js作者是推荐使用 provide inject 方式来挂载原型链函数。

◆ 效果预览

◆ 参数配置

v3popup支持如下参数配置。

复制代码
|props参数|
v-model 是否显示弹框
title 标题
content 内容(支持String、带标签内容、自定义插槽内容)***如果content内容比较复杂,推荐使用标签式写法
type 弹窗类型(toast | footer | actionsheet | actionsheetPicker | android | ios)
popupStyle 自定义弹窗样式
icon toast图标(loading | success | fail)
shade 是否显示遮罩层
shadeClose 是否点击遮罩时关闭弹窗
opacity 遮罩层透明度
round 是否显示圆角
xclose 是否显示关闭图标
xposition 关闭图标位置(left | right | top | bottom)
xcolor 关闭图标颜色
anim 弹窗动画(scaleIn | fadeIn | footer | fadeInUp | fadeInDown)
position 弹出位置(top | right | bottom | left)
follow 长按/右键弹窗(坐标点)
time 弹窗自动关闭秒数(1、2、3)
zIndex 弹窗层叠(默认8080)
teleport 指定挂载节点(默认是挂载组件标签位置,可通过teleport自定义挂载位置) teleport=“body | #xxx | .xxx”
btns 弹窗按钮(参数:text|style|disabled|click)
++++++++++++++++++++++++++++++++++++++++++++++
|emit事件触发|
success 层弹出后回调(@success=“xxx”)
end 层销毁后回调(@end=“xxx”)
++++++++++++++++++++++++++++++++++++++++++++++
|event事件|
onSuccess 层打开回调事件
onEnd 层关闭回调事件
复制代码
v3popup.vue模板

复制代码



<div v-if=“JSON.parse(shade)” class=“vui__overlay” @click=“shadeClicked” :style="{opacity}">















<span v-for="(btn, index) in btns" :key=“index” class=“btn” :style=“btn.style” @click=“btnClicked($event, index)” v-html=“btn.text”>

<span v-if=“xclose” class=“vui__xclose” :class=“xposition” :style="{‘color’: xcolor}" @click=“close”>





复制代码
复制代码
/**

  • @Desc Vue3.0自定义弹框组件V3Popup
  • @Time andy by 2020-12
  • @About Q:282310962 wx:xy190310
    */

复制代码
Vue3中可通过 createApp 或 createVNode | render 来挂载实例到body来实现函数式调用。

复制代码
import { createApp } from ‘vue’
import PopupConstructor from ‘./popup.vue’

let $inst
// 创建挂载实例
let createMount = (opts) => {
const mountNode = document.createElement(‘div’)
document.body.appendChild(mountNode)

const app = createApp(PopupConstructor, {
    ...opts, modelValue: true,
    remove() {
        app.unmount(mountNode)
        document.body.removeChild(mountNode)
    }
})
return app.mount(mountNode)

}

function V3Popup(options = {}) {
options.id = options.id || ‘v3popup_’ + generateId()
$inst = createMount(options)

return $inst

}

V3Popup.install = app => {
app.component(‘v3-popup’, PopupConstructor)
// app.config.globalProperties.$v3popup = V3Popup
app.provide(‘v3popup’, V3Popup)
}
复制代码
这样就实现了在vue3中注册原型链函数和v3-popup组件,就可以使用函数式调用了。

好了,基于Vue3开发自定义弹框组件就分享到这里。希望对大家有些帮助哈!💪

最后附上一个Next.js实例项目

Next+React.js桌面端聊天:https://www.cnblogs.com/xiaoyan2017/p/14195483.html

本文为博主原创文章,未经博主允许不得转载,欢迎大家一起交流 QQ(282310962) wx(xy190310)
分类: vue项目实例
标签: vue3.x模态框, vue3全局弹窗, vue3对话框, vue3.0自定义弹框, vue3自定义组件
好文要顶 关注我 收藏该文
xiaoyan2017
关注 - 0
粉丝 - 162
+加关注
0 0
« 上一篇: Next.js+React聊天室|Next仿微信桌面端|next.js聊天实例
posted @ 2020-12-30 12:22 xiaoyan2017 阅读(41) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
登录后才能发表评论,立即 登录 或 注册, 访问 网站首页
写给园友们的一封求助信
【推荐】News: 大型组态、工控、仿真、CADGIS 50万行VC++源码免费下载
【推荐】有你助力,更好为你——博客园用户消费观调查,附带小惊喜!
【推荐】博客园x丝芙兰-圣诞特别活动:圣诞选礼,美力送递
【推荐】了不起的开发者,挡不住的华为,园子里的品牌专区
【福利】AWS携手博客园为开发者送免费套餐+50元京东E卡
【推荐】未知数的距离,毫秒间的传递,声网与你实时互动
【推荐】新一代 NoSQL 数据库,Aerospike专区新鲜入驻

相关博文:
· VUE3
· vue3作业
· vue3——vue数据循环渲染
· Scrapy框架、Springboot框架、Flask框架、Django框架
· 框架
» 更多推荐…

最新 IT 新闻:
· 知乎到底比B站差哪了?
· 淘宝揭晓年度“丑东西”:羊毛毡买家秀“拔得头丑”
· 太空垃圾增多威胁地球安全?日本研发木制卫星
· 沈向洋:人工智能社区将创造更多工具释放人类创造力
· 业内首创!小米MIUI 12.5无障碍触感新功能发布
» 更多新闻…
公告

昵称: xiaoyan2017
园龄: 3年1个月
粉丝: 162
关注: 0
+加关注
搜索

找找看
常用链接

我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签

react聊天室(2)
h5聊天(2)
vue聊天室(2)
h5仿微信聊天(2)
移动端弹窗(2)
react仿微信界面(2)
react客户端(1)
react聊天(1)
react聊天IM(1)
移动端旅行app(1)
更多
随笔分类

angular实战(1)
electron+vue(1)
Flutter实例(2)
H5项目实战(17)
HTML5+css3(20)
jQuery知识(2)
nuxt+vue实例(6)
react+redux实战案例(6)
react-native实战开发(1)
Taro实例(3)
uni-app实例(4)
vue项目实例(5)
小程序开发(4)
随笔档案

2020年12月(3)
2020年11月(2)
2020年10月(4)
2020年5月(1)
2020年4月(1)
2020年1月(1)
2019年12月(2)
2019年11月(2)
2019年10月(1)
2019年9月(3)
2019年8月(1)
2019年7月(1)
2019年6月(2)
2019年4月(2)
2019年1月(2)
更多
最新评论

  1. Re:旅行app(游记、攻略、私人定制) | 顺便游旅行H5移动端实例
    哥们了不起,能考虑分享源码么
    –IT自学吧

  2. Re:基于vue+uniapp直播项目|uni-app仿抖音/陌陌直播室
    @C# Code 博主根本不回复啊…
    –阿陆

  3. Re:Vue.js 桌面端自定义滚动条组件|vue美化滚动条VScroll
    试试betterscroll
    –GZ^

  4. Re:基于vue+uniapp直播项目|uni-app仿抖音/陌陌直播室
    如果可以获得源码,望联系详谈
    –C# Code

  5. Re:react-native自定义Modal模态框|仿ios、微信弹窗RN版
    请帖github地址急需 谢谢
    –Laughing_thg
    阅读排行榜

  6. vue聊天室|h5+vue仿微信聊天界面|vue仿微信(33844)

  7. h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器(25036)

  8. uni-app自定义Modal弹窗组件|仿ios、微信弹窗效果(23993)

  9. 小程序版聊天室|聊天小程序|仿微信聊天界面小程序(23786)

  10. uni-app自定义导航栏按钮|uniapp仿微信顶部导航条(23101)
    评论排行榜

  11. 基于vue+uniapp直播项目|uni-app仿抖音/陌陌直播室(6)

  12. uni-app聊天室|vue+uniapp仿微信聊天实例|uniapp仿微信App界面(6)

  13. 移动端h5直播项目|html5直播实战开发|h5仿陌陌(6)

  14. h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器(6)

  15. electron聊天室|vue+electron-vue仿微信客户端|electron桌面聊天(5)
    推荐排行榜

  16. h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器(9)

  17. 基于vue+uniapp直播项目|uni-app仿抖音/陌陌直播室(8)

  18. uni-app聊天室|vue+uniapp仿微信聊天实例|uniapp仿微信App界面(6)

  19. vue仿微信网页版|vue+web端聊天室|仿微信客户端vue版(5)

  20. 移动端h5直播项目|html5直播实战开发|h5仿陌陌(5)
    Copyright © 2020 xiaoyan2017
    Powered by .NET 5.0 on Kubernetes
    友情链接:web码农◆前端技术

### 回答1: 可以使用Python中的pandas库将时间序列数据存储到DataFrame中,然后使用pandas的to_excel()方法将其输出到Excel文件中。 首先,需要使用pandas中的date_range()函数生成时间索引,确定时间范围从2018-01-01 08:00:00到2020-12-30 00:00:00,每小时取一个值。 其次,使用pandas中的DataFrame()函数创建一个新的DataFrame并将时间索引设置为刚才生成的时间索引。 最后,使用DataFrame的to_excel()方法将其输出到Excel文件中。 代码示例如下: ``` python import pandas as pd # 生成时间索引 time_index = pd.date_range('2018-01-01 08:00:00', '2020-12-30 00:00:00', freq='H') # 创建新的DataFrame并将时间索引设置为刚才生成的时间索引 df = pd.DataFrame(index=time_index) # 输出到Excel文件 df.to_excel('output.xlsx') ``` ### 回答2: 首先,我们需要计算从2018年1月1日08:00:00到20201230日00:00:00的总小时数。我们可以使用日期时间函数来完成这个计算。 首先,计算起始日期和结束日期之间的总天数。起始日期是2018年1月1日08:00:00,结束日期是20201230日00:00:00。计算这两个日期之间的天数,可以使用以下公式: =end_date - start_date + 1 其中,"+1"是因为起始日期所占的一天也要计算在内。 接下来,计算总小时数。因为每天有24小时,所以总小时数等于总天数乘以24。公式如下: total_hours = total_days * 24 现在我们知道了从起始日期到结束日期的总小时数,我们可以使用循环来逐小时生成日期时间,并将其写入Excel文件。我们可以使用Python中的openpyxl库来实现这个功能。 首先,导入必要的库: import openpyxl from datetime import datetime, timedelta 然后,创建一个新的Excel工作簿: workbook = openpyxl.Workbook() sheet = workbook.active 接下来,设置起始日期和结束日期: start_date = datetime(2018, 1, 1, 8, 0, 0) end_date = datetime(2020, 12, 30, 0, 0, 0) 然后,用循环生成连续的日期时间,并将其写入Excel文件: current_date = start_date for i in range(total_hours): sheet.cell(row=i+1, column=1).value = current_date current_date += timedelta(hours=1) 最后,保存Excel文件: workbook.save('output.xlsx') 以上就是将2018年1月1日08:00:00到20201230日00:00:00的连续时间每小时取一个值,并输出为Excel文件的步骤。 ### 回答3: 要将2018-01-01 08:00:00到2020-12-30 00:00:00这个时间范围内每小时连续取一个值,并输出到Excel文件中,可以使用Python编程语言中的pandas和openpyxl库来实现。 首先,我们需要导入所需的库: ```python import pandas as pd from openpyxl import Workbook ``` 接下来,我们可以创建一个日期范围,从2018-01-01 08:00:00到2020-12-30 00:00:00,每小时的频率,并将其存储在一个DataFrame中: ```python start_date = pd.Timestamp('2018-01-01 08:00:00') end_date = pd.Timestamp('2020-12-30 00:00:00') date_range = pd.date_range(start=start_date, end=end_date, freq='1H') df = pd.DataFrame(date_range, columns=['Timestamp']) ``` 然后,我们可以向DataFrame中添加其他需要的列,例如年、月、日和小时: ```python df['Year'] = df['Timestamp'].dt.year df['Month'] = df['Timestamp'].dt.month df['Day'] = df['Timestamp'].dt.day df['Hour'] = df['Timestamp'].dt.hour ``` 最后,我们可以使用openpyxl库将DataFrame保存到Excel文件中: ```python output_file = 'output.xlsx' with pd.ExcelWriter(output_file, engine='openpyxl') as writer: df.to_excel(writer, index=False) ``` 完整的代码如下: ```python import pandas as pd from openpyxl import Workbook start_date = pd.Timestamp('2018-01-01 08:00:00') end_date = pd.Timestamp('2020-12-30 00:00:00') date_range = pd.date_range(start=start_date, end=end_date, freq='1H') df = pd.DataFrame(date_range, columns=['Timestamp']) df['Year'] = df['Timestamp'].dt.year df['Month'] = df['Timestamp'].dt.month df['Day'] = df['Timestamp'].dt.day df['Hour'] = df['Timestamp'].dt.hour output_file = 'output.xlsx' with pd.ExcelWriter(output_file, engine='openpyxl') as writer: df.to_excel(writer, index=False) ``` 运行这段代码将生成一个名为output.xlsx的Excel文件,其中包含从2018-01-01 08:00:00到2020-12-30 00:00:00每小时连续取一个值的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值