HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

HBuilderX 3.0.0 uniCloud目录结构调整说明

HBuilderX

HBuilderX, 3.0.0版本,调整了uniCloud目录结构。

项目根目录下为uniCloud目录,其下有二级目录cloudfunctionsdatabase。database目录存放数据表schema扩展验证函数

为什么调整?

现有的cloudfunctions-[aliyun|tcb]目录结构在小项目下可以满足使用的要求,随着项目的越来越大,模块之间的关系越来越复杂,开发人员可能会将大部分的精力放在维护模块关系和处理代码的问题上。

那么如何让开发人员花跟多的精力在真正应该关心的核心业务上?

简单的调用和依赖关系已经不能满足复杂的业务场景,为了更好的管理模块之间的关系,使调试和维护更简单,模块解耦合的先进理念也应该深入到云函数的设计中,为此,我们推出下一阶段的uniCloud目录结构,调整了原来的cloudfunctions-[aliyun|tcb]目录结构

1. uniCloud目录结构列表详情

2. 目录迁移

如何将cloudfunctions-tcb|aliyun迁移到uniCloud-tcb|aliyun?
HBuilderX启动后,如果您的项目管理器,项目下存在cloudfunctions-tcb|aliyun目录,则会自动弹窗迁移窗口。

当然,您也可以在项目上手动操作。选择cloudfunctions-tcb|aliyun目录,右键菜单点击【迁移cloudfunctions目录】

3. 初始化云函数cloudfunctions_init.json文件调整

cloudfunctions_init.json文件内容,迁移至云函数下package.json文件
如下图所示,package.json文件,cloudfunction-config字段,即为cloudfunctions_init.json文件内容。

选中云函数,右键菜单,点击【上传部署】,会一并更新云函数初始化配置

继续阅读 »

HBuilderX, 3.0.0版本,调整了uniCloud目录结构。

项目根目录下为uniCloud目录,其下有二级目录cloudfunctionsdatabase。database目录存放数据表schema扩展验证函数

为什么调整?

现有的cloudfunctions-[aliyun|tcb]目录结构在小项目下可以满足使用的要求,随着项目的越来越大,模块之间的关系越来越复杂,开发人员可能会将大部分的精力放在维护模块关系和处理代码的问题上。

那么如何让开发人员花跟多的精力在真正应该关心的核心业务上?

简单的调用和依赖关系已经不能满足复杂的业务场景,为了更好的管理模块之间的关系,使调试和维护更简单,模块解耦合的先进理念也应该深入到云函数的设计中,为此,我们推出下一阶段的uniCloud目录结构,调整了原来的cloudfunctions-[aliyun|tcb]目录结构

1. uniCloud目录结构列表详情

2. 目录迁移

如何将cloudfunctions-tcb|aliyun迁移到uniCloud-tcb|aliyun?
HBuilderX启动后,如果您的项目管理器,项目下存在cloudfunctions-tcb|aliyun目录,则会自动弹窗迁移窗口。

当然,您也可以在项目上手动操作。选择cloudfunctions-tcb|aliyun目录,右键菜单点击【迁移cloudfunctions目录】

3. 初始化云函数cloudfunctions_init.json文件调整

cloudfunctions_init.json文件内容,迁移至云函数下package.json文件
如下图所示,package.json文件,cloudfunction-config字段,即为cloudfunctions_init.json文件内容。

选中云函数,右键菜单,点击【上传部署】,会一并更新云函数初始化配置

收起阅读 »

【报BUG】阿里云云数据库DB Schema权限配置无效,请官方重视

bug已修复

云数据库中配置DB Schema如下

{  
  "bsonType": "object",  
  "required": [  
    "title"  
  ],  
  "permission": {  
    "read": true,  
    "create": true,  
    "update": "doc.uid == auth.uid",  
    "delete": "doc.uid == auth.uid"  
  },  
  "properties": {  
    "_id": {  
      "description": "ID,系统自动生成"  
    },  
    "uid": {  
      "forceDefaultValue": {  
        "$env": "uid"  
      },  
      "foreignKey": "uni-id-users._id",  
      "permission": {  
        "read": true,  
        "create": false,  
        "update": false,  
        "delete": false  
      },  
      "description": "用户ID"  
    },  
    "updated_at": {  
      "forceDefaultValue": {  
        "$env": "now"  
      },  
      "description": "数据更新时间"  
    },  
    "ip_address": {  
      "permission": {  
        "read": false,  
        "write": false  
      },  
      "forceDefaultValue": {  
        "$env": "clientIP"  
      },  
      "description": "数据更新时间"  
    },  
    "created_at": {  
      "bsonType": "int",  
      "permission": {  
        "read": true,  
        "create": false,  
        "update": false,  
        "delete": false  
      },  
      "forceDefaultValue": {  
        "$env": "now"  
      },  
      "description": "数据发布时间"  
    },  
    "title": {  
      "bsonType": "string",  
      "description": "标题"  
    }  
  }  
}

在前端使用clientDB查询数据,其中ip_address字段的值正常返回,并没有因为在权限中设置了read:false而不返回
这是严重的安全问题,望官方尽快修解决



顶起

继续阅读 »

云数据库中配置DB Schema如下

{  
  "bsonType": "object",  
  "required": [  
    "title"  
  ],  
  "permission": {  
    "read": true,  
    "create": true,  
    "update": "doc.uid == auth.uid",  
    "delete": "doc.uid == auth.uid"  
  },  
  "properties": {  
    "_id": {  
      "description": "ID,系统自动生成"  
    },  
    "uid": {  
      "forceDefaultValue": {  
        "$env": "uid"  
      },  
      "foreignKey": "uni-id-users._id",  
      "permission": {  
        "read": true,  
        "create": false,  
        "update": false,  
        "delete": false  
      },  
      "description": "用户ID"  
    },  
    "updated_at": {  
      "forceDefaultValue": {  
        "$env": "now"  
      },  
      "description": "数据更新时间"  
    },  
    "ip_address": {  
      "permission": {  
        "read": false,  
        "write": false  
      },  
      "forceDefaultValue": {  
        "$env": "clientIP"  
      },  
      "description": "数据更新时间"  
    },  
    "created_at": {  
      "bsonType": "int",  
      "permission": {  
        "read": true,  
        "create": false,  
        "update": false,  
        "delete": false  
      },  
      "forceDefaultValue": {  
        "$env": "now"  
      },  
      "description": "数据发布时间"  
    },  
    "title": {  
      "bsonType": "string",  
      "description": "标题"  
    }  
  }  
}

在前端使用clientDB查询数据,其中ip_address字段的值正常返回,并没有因为在权限中设置了read:false而不返回
这是严重的安全问题,望官方尽快修解决



顶起

收起阅读 »

建议编辑器把html及js的语义默认为html(ES6+)及javascript(ES6+),现在每次都去切换,有些麻烦

建议编辑器把html及js的语义默认为html(ES6+)及javascript(ES6+),现在每次都去切换,有些麻烦

建议编辑器把html及js的语义默认为html(ES6+)及javascript(ES6+),现在每次都去切换,有些麻烦

文件io操作中的moveTo和copyTo的坑

moveTo和copyTo的第二个参数,文档中说明的是可选,我自己实际操作,如果不给这个参数,永远都不成功,这两个参数给了就成功了。分享一下

moveTo和copyTo的第二个参数,文档中说明的是可选,我自己实际操作,如果不给这个参数,永远都不成功,这两个参数给了就成功了。分享一下

uniCloud.deleteFile相关

删除文件 uniCloud

试了一下uniCloud.deleteFile删除的方法,发现第一种未删除成功,第二种就删除成功了。有人知道啥原因嘛

试了一下uniCloud.deleteFile删除的方法,发现第一种未删除成功,第二种就删除成功了。有人知道啥原因嘛

HBuilderX必装的插件

HBuilderX

排名不分先后

HBuilderX主题插件

HBuilderX自定义主题辅助工具, 可以轻松定制漂亮主题。同时内置多套主题,并支持从浏览器安装主题。下载地址

image.png

eslint-js 语法校验插件

用于校验js和html中的js代码,且支持eslint 实时校验、自动修复错误。下载地址

image.png

Git源代码管理工具: easy-git

vscode源代码管理工具风格。
HBuilderX内唯一的图形化Git工具, 支持克隆、提交/更新/拉取、分支/tag管理、日志、文件对比、储藏等操作。
并且支持通过命令面板操作git相关操作。

下载地址

image.png

彩虹屁老婆

虚拟程序员鼓励师老婆陪你敲代码哟。在你编程时给你爱的鼓励!下载地址

image.png

便捷翻译插件

全语种翻译(含拼音)插件 下载地址

image.png

es6代码块

常用的es6代码块 下载地址

Formator-Prettier 格式化插件

用于格式化less、sass、vue、stylus、ts、yaml代码。下载地址

compile-node-sass

compile-node-sass: scss/sass编译插件, 可以编译sass为css。下载地址

image.png

compile-less

compile-less: less插件用于less文件编译,编译less为css。下载地址

image.png

继续阅读 »

排名不分先后

HBuilderX主题插件

HBuilderX自定义主题辅助工具, 可以轻松定制漂亮主题。同时内置多套主题,并支持从浏览器安装主题。下载地址

image.png

eslint-js 语法校验插件

用于校验js和html中的js代码,且支持eslint 实时校验、自动修复错误。下载地址

image.png

Git源代码管理工具: easy-git

vscode源代码管理工具风格。
HBuilderX内唯一的图形化Git工具, 支持克隆、提交/更新/拉取、分支/tag管理、日志、文件对比、储藏等操作。
并且支持通过命令面板操作git相关操作。

下载地址

image.png

彩虹屁老婆

虚拟程序员鼓励师老婆陪你敲代码哟。在你编程时给你爱的鼓励!下载地址

image.png

便捷翻译插件

全语种翻译(含拼音)插件 下载地址

image.png

es6代码块

常用的es6代码块 下载地址

Formator-Prettier 格式化插件

用于格式化less、sass、vue、stylus、ts、yaml代码。下载地址

compile-node-sass

compile-node-sass: scss/sass编译插件, 可以编译sass为css。下载地址

image.png

compile-less

compile-less: less插件用于less文件编译,编译less为css。下载地址

image.png

收起阅读 »

mac 开发h5 web浏览器 报错

h5

There is no Internet connection

There is something wrong with the proxy server, or the address is incorrect.
Try:
Contacting the system admin
Checking the proxy address
ERR_PROXY_CONNECTION_FAILED

If you use a proxy server…
Check your proxy settings or contact your network administrator to make sure the proxy server is working. If you don't believe you should be using a proxy server: Go to Applications > System Preferences > Network > Advanced > Proxies and deselect any proxies that have been selected.

那位大咖,麻烦给我参考一下 mac代理设置

继续阅读 »

There is no Internet connection

There is something wrong with the proxy server, or the address is incorrect.
Try:
Contacting the system admin
Checking the proxy address
ERR_PROXY_CONNECTION_FAILED

If you use a proxy server…
Check your proxy settings or contact your network administrator to make sure the proxy server is working. If you don't believe you should be using a proxy server: Go to Applications > System Preferences > Network > Advanced > Proxies and deselect any proxies that have been selected.

那位大咖,麻烦给我参考一下 mac代理设置

收起阅读 »

刚从apicloud转过来,分享一下看法吧

APICloud

非职业码农,算是爱好

apicloud有一个优点就是更简单,文档更易阅读。

过来这边因为我没有用小程序的需求,而且对自由性要求比较高,所以没用uni-app

目前看到的就是这边api更多,但是文档写得不好(一般吧)。
很多东西不需要重新打包。例如:改为沉浸式状态栏或非沉浸式。直接更新后重启一下就行了。apicloud那边app还得重新编译一下
APP启动速度超级快,我这边的程序0.6s就可以启动完毕,那边要3s

不过apicloud的扩展性也还行,绝大多数功能都有模块供你使用

转过来的原因是因为那边吃相太难看。APP安装量大于5w,月活大于1w就需要开通商业服务。5999元以上。以后人越多还越贵。最多是2w多(大概)
当然收费并非不行,主要是页面上根本没有告诉你后续需要开通商业服务。你得经常浏览他们的论坛才能知道。真恶心人

继续阅读 »

非职业码农,算是爱好

apicloud有一个优点就是更简单,文档更易阅读。

过来这边因为我没有用小程序的需求,而且对自由性要求比较高,所以没用uni-app

目前看到的就是这边api更多,但是文档写得不好(一般吧)。
很多东西不需要重新打包。例如:改为沉浸式状态栏或非沉浸式。直接更新后重启一下就行了。apicloud那边app还得重新编译一下
APP启动速度超级快,我这边的程序0.6s就可以启动完毕,那边要3s

不过apicloud的扩展性也还行,绝大多数功能都有模块供你使用

转过来的原因是因为那边吃相太难看。APP安装量大于5w,月活大于1w就需要开通商业服务。5999元以上。以后人越多还越贵。最多是2w多(大概)
当然收费并非不行,主要是页面上根本没有告诉你后续需要开通商业服务。你得经常浏览他们的论坛才能知道。真恶心人

收起阅读 »

UniApp 中发现一个小BUG

tabbar上边做四个页面 每个页面显示标题栏 标题栏上边有个图标 图标事件弹出Drawer抽屉
如果页面里边什么都不放只放一个Drawer抽屉 先切第二个页面 弹出Drawer抽屉 再切第三个页面 弹出Drawer抽屉 然后切回第一个页面 第一个页面的tabbar不会响应onTabItemTap事件,也弹不出第一个页面的Drawer抽屉
页面里有内容就不会有这个现象

继续阅读 »

tabbar上边做四个页面 每个页面显示标题栏 标题栏上边有个图标 图标事件弹出Drawer抽屉
如果页面里边什么都不放只放一个Drawer抽屉 先切第二个页面 弹出Drawer抽屉 再切第三个页面 弹出Drawer抽屉 然后切回第一个页面 第一个页面的tabbar不会响应onTabItemTap事件,也弹不出第一个页面的Drawer抽屉
页面里有内容就不会有这个现象

收起阅读 »

Vue.js自定义PC版模态框组件|vue layer弹层

vue.js

介绍

vlayer 一款基于vue.js构建的桌面端弹框组件。集合了 alert|dialog|modal|msg|notify|popover|toast|actionsheet 等多种功能于一身。

基于vue.js构建pc端弹窗组件|仿layer弹框插件

vlayer

vlayer

快速上手

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

import VLayer from './components/vlayer';  
Vue.use(VLayer);

标签式写法

<v-layer   
    v-model="isConfirm"  
    title="标题内容"  
    content="<div style='color:#06f;padding:15px;'>弹窗内容信息!</div>"  
    xclose  
    z-index="2002"  
    lockScroll="false"  
    resize  
    dragOut  
    :btns="[  
        {text: '取消', click: () => isConfirm=false},  
        {text: '确定', style: 'color:#f90;', click: handleFn},  
    ]"  
/>

函数式写法

let $el = this.$vlayer({  
    title: '标题内容',  
    content: '<div style='color:#06f;padding:15px;'>弹窗内容信息!</div>',   
    xclose: true,  
    zIndex: 2002,  
    lockScroll: false,  
    resize: true,  
    dragOut: true,  
    btns: [  
        {text: '取消', click: () => { $el.close(); }},  
        {text: '确定', click: () => this.handleFn()},  
    ]  
});

效果预览

vlayer

vlayer

vlayer

vlayer

vlayer

vlayer

vlayer

配置参数

vlayer默认支持30+种参数任意搭配。

@@默认参数  
v-model     当前组件是否显示  
title       标题  
content     内容(支持自定义插槽内容)  
type        弹窗类型(toast | footer | actionsheet | android/ios | contextmenu | drawer | iframe | message/notify/popover)  
layerStyle  自定义弹窗样式  
icon        toast图标(loading | success | fail)  
shade       是否显示遮罩层  
shadeClose  是否点击遮罩时关闭弹窗  
lockScroll  是否弹窗出现时将 body 滚动锁定  
opacity     遮罩层透明度  
xclose      是否显示关闭图标  
xposition   关闭图标位置(left | right | top | bottom)  
xcolor      关闭图标颜色  
anim        弹窗动画(scaleIn | fadeIn | footer | fadeInUp | fadeInDown | fadeInLeft | fadeInRight)  
position    弹出位置(auto | ['100px','50px'] | t | r | b | l | lt | rt | lb | rb)  
drawer      抽屉弹窗(top | right | bottom | left)  
follow      跟随元素定位弹窗(支持元素.kk #kk 或 [e.clientX, e.clientY])  
time        弹窗自动关闭秒数(1、2、3)  
zIndex      弹窗层叠(默认8080)  
topmost     置顶当前窗口(默认false)  
area        弹窗宽高(默认auto)设置宽度area: '300px' 设置高度area:['', '200px'] 设置宽高area:['350px', '150px']  
maxWidth    弹窗最大宽度(只有当area:'auto'时,maxWidth的设定才有效)  
maximize    是否显示最大化按钮(默认false)  
fullscreen  全屏弹窗(默认false)  
fixed       弹窗是否固定  
drag        拖拽元素(可定义选择器drag:'.xxx' | 禁止拖拽drag:false)  
dragOut     是否允许拖拽到窗口外(默认false)  
resize      是否允许拉伸尺寸(默认false)  
btns        弹窗按钮(参数:text|style|disabled|click)  
------------------------------------------  
@@组件式事件  
open        打开弹出层时触发(@open="xxx")  
close       关闭弹出层时触发(@close="xxx")  
------------------------------------------  
@@函数式事件  
onOpen      打开弹窗回调  
onClose     关闭弹窗回调

vlayer.vue模板

<template>  
  <div v-show="opened" class="vui__layer" :class="{'vui__layer-closed': closeCls}" :id="vlayerId">  
    <div v-if="JSON.parse(shade)" class="vlayer__overlay" @click="shadeClicked" :style="{opacity}"></div>  
    <div class="vlayer__wrap" :class="[''+anim, type&&'popui__'+type, drawer&&'popui'+drawer, xclose&&'vlayer-closable', tipArrow]" :style="layerStyle">  
      <div v-if="title" class="vlayer__wrap-tit" v-html="title"></div>  
      <div v-if="type=='toast'&&icon" class="vlayer__toast-icon" :class="['vlayer'+icon]" v-html="toastIcon[icon]"></div>  
      <div class="vlayer__wrap-cntbox">  
        <template v-if="$slots.content">  
          <div class="vlayer__wrap-cnt"><slot name="content" /></div>  
        </template>  
        <template v-else>  
          <template v-if="content">  
            <iframe v-if="type=='iframe'" scrolling="auto" allowtransparency="true" frameborder="0" :src="content"></iframe>  
            <!-- message|notify|popover -->  
            <div v-else-if="type=='message' || type=='notify' || type=='popover'" class="vlayer__wrap-cnt">  
              <i v-if="icon" class="vlayer-msg__icon" :class="icon" v-html="messageIcon[icon]"></i>  
              <div class="vlayer-msg__group"><div v-if="title" class="vlayer-msg__title" v-html="title"></div><div class="vlayer-msg__content" v-html="content"></div></div>  
            </div><div v-else class="vlayer__wrap-cnt" v-html="content"></div>  
          </template>  
        </template>  
        <slot />  
      </div>  
      <div v-if="btns" class="vlayer__wrap-btns">  
        <span v-for="(btn,index) in btns" :key="index" class="btn" :class="{'btn-disabled': btn.disabled}" :style="btn.style" v-html="btn.text"></span>  
      </div>  
      <span v-if="xclose" class="vlayer__xclose" :class="!maximize&&xposition" :style="{'color': xcolor}" @click="close"></span>  
      <span v-if="maximize" class="vlayer__maximize"></span>  
      <span v-if="resize" class="vlayer__resize"></span>  
    </div>  
    <!-- 修复拖拽卡顿 -->  
    <div class="vlayer__dragfix"></div>  
  </div>  
</template>

默认标题是拖拽区域,当然也可以自定义拖拽元素,只需设置 drag: '#xxx' 或者设置drag: false 来禁止弹窗拖拽功能。

当设置 dragOut: true 窗体可以拖拽到浏览器外部。

当使用popover弹窗,需要传入follow: '#xxxx' 定位元素。

另外还支持自定义弹窗显示位置,只需配置position即可。

<!-- 自定义弹窗位置 -->  
<v-layer v-model="showPosition" xclose maximize drag=".dragImg" :position="rb">  
    <img class="dragImg" src="xxx.jpg" />  
</v-layer>

设置fullscreen: true会全屏显示弹窗。

vlayer

okay,基于vue.js开发pc端弹窗插件就分享到这里。希望对大家有所帮助哈!✍✍

链接:https://juejin.im/post/6890442763041669127/
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

继续阅读 »

介绍

vlayer 一款基于vue.js构建的桌面端弹框组件。集合了 alert|dialog|modal|msg|notify|popover|toast|actionsheet 等多种功能于一身。

基于vue.js构建pc端弹窗组件|仿layer弹框插件

vlayer

vlayer

快速上手

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

import VLayer from './components/vlayer';  
Vue.use(VLayer);

标签式写法

<v-layer   
    v-model="isConfirm"  
    title="标题内容"  
    content="<div style='color:#06f;padding:15px;'>弹窗内容信息!</div>"  
    xclose  
    z-index="2002"  
    lockScroll="false"  
    resize  
    dragOut  
    :btns="[  
        {text: '取消', click: () => isConfirm=false},  
        {text: '确定', style: 'color:#f90;', click: handleFn},  
    ]"  
/>

函数式写法

let $el = this.$vlayer({  
    title: '标题内容',  
    content: '<div style='color:#06f;padding:15px;'>弹窗内容信息!</div>',   
    xclose: true,  
    zIndex: 2002,  
    lockScroll: false,  
    resize: true,  
    dragOut: true,  
    btns: [  
        {text: '取消', click: () => { $el.close(); }},  
        {text: '确定', click: () => this.handleFn()},  
    ]  
});

效果预览

vlayer

vlayer

vlayer

vlayer

vlayer

vlayer

vlayer

配置参数

vlayer默认支持30+种参数任意搭配。

@@默认参数  
v-model     当前组件是否显示  
title       标题  
content     内容(支持自定义插槽内容)  
type        弹窗类型(toast | footer | actionsheet | android/ios | contextmenu | drawer | iframe | message/notify/popover)  
layerStyle  自定义弹窗样式  
icon        toast图标(loading | success | fail)  
shade       是否显示遮罩层  
shadeClose  是否点击遮罩时关闭弹窗  
lockScroll  是否弹窗出现时将 body 滚动锁定  
opacity     遮罩层透明度  
xclose      是否显示关闭图标  
xposition   关闭图标位置(left | right | top | bottom)  
xcolor      关闭图标颜色  
anim        弹窗动画(scaleIn | fadeIn | footer | fadeInUp | fadeInDown | fadeInLeft | fadeInRight)  
position    弹出位置(auto | ['100px','50px'] | t | r | b | l | lt | rt | lb | rb)  
drawer      抽屉弹窗(top | right | bottom | left)  
follow      跟随元素定位弹窗(支持元素.kk #kk 或 [e.clientX, e.clientY])  
time        弹窗自动关闭秒数(1、2、3)  
zIndex      弹窗层叠(默认8080)  
topmost     置顶当前窗口(默认false)  
area        弹窗宽高(默认auto)设置宽度area: '300px' 设置高度area:['', '200px'] 设置宽高area:['350px', '150px']  
maxWidth    弹窗最大宽度(只有当area:'auto'时,maxWidth的设定才有效)  
maximize    是否显示最大化按钮(默认false)  
fullscreen  全屏弹窗(默认false)  
fixed       弹窗是否固定  
drag        拖拽元素(可定义选择器drag:'.xxx' | 禁止拖拽drag:false)  
dragOut     是否允许拖拽到窗口外(默认false)  
resize      是否允许拉伸尺寸(默认false)  
btns        弹窗按钮(参数:text|style|disabled|click)  
------------------------------------------  
@@组件式事件  
open        打开弹出层时触发(@open="xxx")  
close       关闭弹出层时触发(@close="xxx")  
------------------------------------------  
@@函数式事件  
onOpen      打开弹窗回调  
onClose     关闭弹窗回调

vlayer.vue模板

<template>  
  <div v-show="opened" class="vui__layer" :class="{'vui__layer-closed': closeCls}" :id="vlayerId">  
    <div v-if="JSON.parse(shade)" class="vlayer__overlay" @click="shadeClicked" :style="{opacity}"></div>  
    <div class="vlayer__wrap" :class="[''+anim, type&&'popui__'+type, drawer&&'popui'+drawer, xclose&&'vlayer-closable', tipArrow]" :style="layerStyle">  
      <div v-if="title" class="vlayer__wrap-tit" v-html="title"></div>  
      <div v-if="type=='toast'&&icon" class="vlayer__toast-icon" :class="['vlayer'+icon]" v-html="toastIcon[icon]"></div>  
      <div class="vlayer__wrap-cntbox">  
        <template v-if="$slots.content">  
          <div class="vlayer__wrap-cnt"><slot name="content" /></div>  
        </template>  
        <template v-else>  
          <template v-if="content">  
            <iframe v-if="type=='iframe'" scrolling="auto" allowtransparency="true" frameborder="0" :src="content"></iframe>  
            <!-- message|notify|popover -->  
            <div v-else-if="type=='message' || type=='notify' || type=='popover'" class="vlayer__wrap-cnt">  
              <i v-if="icon" class="vlayer-msg__icon" :class="icon" v-html="messageIcon[icon]"></i>  
              <div class="vlayer-msg__group"><div v-if="title" class="vlayer-msg__title" v-html="title"></div><div class="vlayer-msg__content" v-html="content"></div></div>  
            </div><div v-else class="vlayer__wrap-cnt" v-html="content"></div>  
          </template>  
        </template>  
        <slot />  
      </div>  
      <div v-if="btns" class="vlayer__wrap-btns">  
        <span v-for="(btn,index) in btns" :key="index" class="btn" :class="{'btn-disabled': btn.disabled}" :style="btn.style" v-html="btn.text"></span>  
      </div>  
      <span v-if="xclose" class="vlayer__xclose" :class="!maximize&&xposition" :style="{'color': xcolor}" @click="close"></span>  
      <span v-if="maximize" class="vlayer__maximize"></span>  
      <span v-if="resize" class="vlayer__resize"></span>  
    </div>  
    <!-- 修复拖拽卡顿 -->  
    <div class="vlayer__dragfix"></div>  
  </div>  
</template>

默认标题是拖拽区域,当然也可以自定义拖拽元素,只需设置 drag: '#xxx' 或者设置drag: false 来禁止弹窗拖拽功能。

当设置 dragOut: true 窗体可以拖拽到浏览器外部。

当使用popover弹窗,需要传入follow: '#xxxx' 定位元素。

另外还支持自定义弹窗显示位置,只需配置position即可。

<!-- 自定义弹窗位置 -->  
<v-layer v-model="showPosition" xclose maximize drag=".dragImg" :position="rb">  
    <img class="dragImg" src="xxx.jpg" />  
</v-layer>

设置fullscreen: true会全屏显示弹窗。

vlayer

okay,基于vue.js开发pc端弹窗插件就分享到这里。希望对大家有所帮助哈!✍✍

链接:https://juejin.im/post/6890442763041669127/
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收起阅读 »

从uniapp的webview跳回APP的方法

Webview

今天找一个网站:https://www.jianshu.com/p/163b1cdd664d 分享出来以后查看

今天找一个网站:https://www.jianshu.com/p/163b1cdd664d 分享出来以后查看

uni-app打包的基于DiscuzQ的App上架iOS了,欢迎来摸鱼

iOS打包

https://apps.apple.com/cn/app/id1539378146

imgbed.cn图床

中间被拒绝过一次,因为没有写明摄像头用途,更改再次提交就通过了

继续阅读 »

https://apps.apple.com/cn/app/id1539378146

imgbed.cn图床

中间被拒绝过一次,因为没有写明摄像头用途,更改再次提交就通过了

收起阅读 »