当前位置: 首页 > Web前端 > vue.js

svelte-popup是基于svelte.js的移动端弹窗组件

时间:2023-03-31 14:24:34 vue.js

前两天给大家分享了一个svelte的自定义Tabbar+Navbar组件。今天给大家带来的是新开发的svelte自定义移动端模态框组件SveltePopup。如下图所示:在lib目录下创建Popup组件目录。svelte-popup组件介绍弹窗组件支持两种调用方式:组件(Popup)+函数(svPopup)。importPopup,{svPopup}from'$lib/Popup'组件调用isShowDialog=false},]}on:open={handleOpen}on:close={handleClose}>

自定义槽显示内容

函数调用letel=svPopup({title:'标题信息',content:'显示内容信息

',xclose:true,shadeClose:false,btns:[{text:'Cancel',click:()=>{el.$set({open:false})}},{text:'Confirm',style:'color:#f90;',click:()=>handleOK},],onOpen:()=>{},onClose:()=>{}})一些简单的弹出-up效果通过函数调用更方便。对于一些功能丰富的弹出式显示,您可以使用基于组件的插槽来自定义插槽。确认框(此处是确认框提示信息,这里是确认框提示信息,这里是确认框提示信息)
"btns={[{text:'Cancel',click:()=>showConfirm=false},{text:'OK',style:'color:#e63d23;',click:handleInfo},]}/>null},{text:'Cancel',style:'color:#a9a9a9;',click:()=>showFooter=false},]}/>null},{text:'Cancel',click:()=>showActionSheet=false},]}/>showActionPicker=false},{text:'OK',style:'color:#00e0a1;',click:()=>null},]}>
  • 背包
  • 鞋子
  • 运动裤
  • 还支持函数式多层混合方式CallfunctionhandleInfo(e){console.log(e)console.log('通过函数调用弹窗...')letel=svPopup({title:'Title',content:`

    函数调用:svPopup({...})

    `,btns:[{text:'Cancel',click:()=>{//关闭弹窗el.$set({open:false})}},{text:'Confirm',style:'color:#09f;',点击:()=>{svPopup({type:'toast',icon:'loading',content:'Loading...',opacity:.2,time:2})}},]})}以及支持组件式和函数式混合调用。svelte-popup参数配置支持以下20+参数混合调用。弹窗模板及js处理部分{#ifbool(阴影)
    {/if}{#iftitle}{@htmltitle}
    {/if}{#ificon&&type=='toast'}{@htmltoastIcon[icon]}{/if}{#if$$slots.content}{:else}{#ifcontent}<divclass="vui__wrap-cnt">{@htmlcontent}{/if}{/if}{#ifbtns}{#eachbtnsasbtn,index}btnClicked(e,index)}>{@htmlbtn.text}{/each}{/if}{#ifxclose}{/if}/***@Descsvelte自定义移动端弹窗组件*@Timeandyby2022/3/15*@AboutQ:282310962wx:xy190310*/开发之初只支持组件式调用。我觉得如果能支持函数式的调用(插入组件到body,关闭和移除)就好了。后来在svelte官网上发现newComponent可以传入props参数。我试了一下,发现确实可以达到这个效果。constcomponent=newComponent(options)下面是官网给出的例子https://svelte.dev/docs#run-t...importAppfrom'./App.svelte';constapp=newApp({target:document.body,props:{//假设App.svelte包含类似//`exportletanswer`:answer:42}});所以创建一个新的popup.js。从'./Popup.svelte'导入弹出窗口letuuid=function(){return'svpopup-'+Math.floor(Math.random()*10000)}exportfunctionsvPopup(options={}){options.id=uuid()constmountNode=document.createElement('div')document.body.appendChild(mountNode)constapp=newPopup({target:mountNode,props:{...options,open:true,//传递函数的removecommandremove(){document.body.removeChild(mountNode)}}})returnapp}exportdefaultPopup通过上述方法完美解决导出组件+函数调用的方法。经过一系列的学习,发现svelte还是挺不错的,尤其是编译速度够快,体积够小。但是唯一遗憾的是我们还没有找到类似Vue全局引入组件的方法。