提交 aa085f50 编写于 作者: DCloud_JSON's avatar DCloud_JSON

使用2.0版。当显示分享窗口时,监听返回操作(如:物理返回,全面屏手机侧滑)关闭分享窗口,而不是关闭当前页面。

上级 3a6dd066
......@@ -142,6 +142,7 @@ uni-starter服务端使用[uni-config-center](https://ext.dcloud.net.cn/plugin?i
列举不需要强制登陆即可访问的页面完整路径(支持正则)
#### 配置示例
配置文件:`项目根目录/uni-starter.config.js`
```js
"router": {
"needLogin" : [
......@@ -303,7 +304,7 @@ uni-starter集成了这个功能,你只需直接在`项目根目录/uni-starte
- 而路由跳转方法不仅有`uni.navigateTo`还有`uni.redirectTo`,`uni.reLaunch`,`uni.switchTab`
- 另外我们还希望控制直接跳转至哪种登陆类型
所以在uni-starter框架中我们这样定义:
> uni-starter/common/appInit.js 的第228-280行
uni-starter/common/appInit.js 的第228-280行
```js
const {"router": {needLogin,login} } = uniStarterConfig //需要登录的页面
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
......
## 1.1.18(2021-10-14)
使用2.0版`uni-share`。当显示分享窗口时,监听返回操作(如:物理返回,全面屏手机侧滑)关闭分享窗口,而不是关闭当前页面。
## 1.1.17(2021-10-12)
- 更新文档
- 修复list页面where条件中缺少&符,导致的错误
......
......@@ -214,6 +214,9 @@
"key": ""
}
}
},
"router": {
"base": ""
}
},
"_spaceID": "",
......
{
"id": "uni-starter",
"displayName": "uni-starter",
"version": "1.1.17",
"version": "1.1.18",
"description": "云端一体应用快速开发基本项目模版",
"keywords": [
"login",
......
......@@ -50,14 +50,22 @@
</template>
<script>
import uniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
import UniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
const uniShare = new UniShare()
const db = uniCloud.database();
const readNewsLog = db.collection('read-news-log')
import {
mapGetters
} from 'vuex';
export default {
onBackPress({from}) {
if(from=='backbutton'){
this.$nextTick(function(){
uniShare.hide()
})
return uniShare.isShow;
}
},
data() {
return {
// 当前显示 _id
......@@ -197,7 +205,7 @@
excerpt,
avatar
}) );
uniShare({
uniShare.show({
content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图)
type: 0,
href: this.uniStarterConfig.h5.url + `/#/pages/list/detail?id=${_id}&title=${title}`,
......@@ -264,7 +272,7 @@
],
cancelText: this.$t('common').cancelShare,
}, e => { //callback
// console.log(e);
console.log(e);
})
},
}
......
......@@ -19,8 +19,17 @@
</view>
</template>
<script>
import uniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
import UniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
const uniShare = new UniShare()
export default {
onBackPress({from}) {
if(from=='backbutton'){
this.$nextTick(function(){
uniShare.hide()
})
return uniShare.isShow;
}
},
onLoad() {
// #ifdef APP-PLUS
this.version = plus.runtime.version
......@@ -53,7 +62,7 @@
slogan,
logo
} = this.about
uniShare({
uniShare.show({
content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图)
type: 0,
href: download,
......
......@@ -37,10 +37,18 @@
} from 'vuex';
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import callCheckVersion from '@/uni_modules/uni-upgrade-center-app/utils/call-check-version';
import uniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
import UniShare from '@/uni_modules/uni-share/js_sdk/uni-share.js';
const uniShare = new UniShare()
const db = uniCloud.database();
export default {
onBackPress({from}) {
if(from=='backbutton'){
this.$nextTick(function(){
uniShare.hide()
})
return uniShare.isShow;
}
},
data() {
return {
gridList: [{
......@@ -264,7 +272,7 @@
slogan
} = this.appConfig.about
// #ifdef APP-PLUS
uniShare({
uniShare.show({
content: { //公共的分享类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图)
type: 0,
href: this.appConfig.h5.url +
......
## 2.0.0(2021-10-14)
支持监听返回操作(如:物理返回,全面屏手机侧滑)关闭分享弹窗
## 1.0.6(2021-08-25)
兼容vue3
## 1.0.5(2021-08-05)
......
var nvMask,nvImageMenu;
export default {
show({list,cancelText},callback){
console.log(789789879);
if(!list){
var nvMask, nvImageMenu;
class NvImageMenu {
constructor(arg) {
this.isShow = false
}
show({
list,
cancelText
}, callback) {
if (!list) {
list = [{
"img":"/static/sharemenu/wechatfriend.png",
"text":"图标文字"
"img": "/static/sharemenu/wechatfriend.png",
"text": "图标文字"
}]
}
//以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心
......@@ -32,7 +37,16 @@ export default {
var top1 = left1
var top2 = top1 + iconWidth + icontextSpace + textHeight + left1
const TOP = {top1,top2}, LEFT = {left1,left2,left3,left4};
const TOP = {
top1,
top2
},
LEFT = {
left1,
left2,
left3,
left4
};
nvMask = new plus.nativeObj.View("nvMask", { //先创建遮罩层
top: '0px',
......@@ -41,26 +55,29 @@ export default {
width: '100%',
backgroundColor: 'rgba(0,0,0,0.2)'
});
nvMask.addEventListener("click", function() { //处理遮罩层点击
nvMask.hide();
nvImageMenu.hide();
})
nvImageMenu = new plus.nativeObj.View("nvImageMenu", { //创建底部图标菜单
bottom: '0px',
left: '0px',
height: (iconWidth + textHeight + 2 * margin)*Math.ceil(list.length/4) +44+'px',//'264px',
height: (iconWidth + textHeight + 2 * margin) * Math.ceil(list.length / 4) + 44 +
'px', //'264px',
width: '100%',
backgroundColor: 'rgb(255,255,255)'
});
nvMask.addEventListener("click", () => { //处理遮罩层点击
// console.log('处理遮罩层点击');
this.hide()
callback({
event: "clickMask"
})
})
let myList = []
list.forEach((item,i)=>{
list.forEach((item, i) => {
myList.push({
tag: 'img',
src: item.img,
position: {
top: TOP['top'+( parseInt(i/4) +1)],
left: LEFT['left'+(1+i%4)],
top: TOP['top' + (parseInt(i / 4) + 1)],
left: LEFT['left' + (1 + i % 4)],
width: iconWidth,
height: iconWidth
}
......@@ -72,8 +89,8 @@ export default {
size: textHeight
},
position: {
top: TOP['top'+(parseInt(i/4)+1)] + iconWidth + icontextSpace,
left: LEFT['left'+(1+i%4)],
top: TOP['top' + (parseInt(i / 4) + 1)] + iconWidth + icontextSpace,
left: LEFT['left' + (1 + i % 4)],
width: iconWidth,
height: textHeight
}
......@@ -81,9 +98,8 @@ export default {
})
//绘制底部图标菜单的内容
nvImageMenu.draw([
{
tag: 'rect',//菜单顶部的分割灰线
nvImageMenu.draw([{
tag: 'rect', //菜单顶部的分割灰线
color: '#e7e7e7',
position: {
top: '0px',
......@@ -92,7 +108,7 @@ export default {
},
{
tag: 'font',
text: cancelText,//底部取消按钮的文字
text: cancelText, //底部取消按钮的文字
textStyles: {
size: '14px'
},
......@@ -102,7 +118,7 @@ export default {
}
},
{
tag: 'rect',//底部取消按钮的顶部边线
tag: 'rect', //底部取消按钮的顶部边线
color: '#e7e7e7',
position: {
bottom: '45px',
......@@ -112,15 +128,27 @@ export default {
...myList
])
nvMask.show()
nvImageMenu.show() //5+应支持从底部向上弹出的动画
nvImageMenu.show()
// 开始动画
/*
plus.nativeObj.View.startAnimation({
type: 'slide-in-bottom',
duration: 300
}, nvImageMenu, {}, function() {
console.log('plus.nativeObj.View.startAnimation动画结束');
// 关闭原生动画
plus.nativeObj.View.clearAnimation();
nvImageMenu.show()
});
*/
nvImageMenu.addEventListener("click",e=>{ //处理底部图标菜单的点击事件,根据点击位置触发不同的逻辑
this.isShow = true
nvImageMenu.addEventListener("click", e => { //处理底部图标菜单的点击事件,根据点击位置触发不同的逻辑
// console.log("click menu"+JSON.stringify(e));
if (e.screenY > plus.screen.resolutionHeight - 44) { //点击了底部取消按钮
nvMask.hide();
nvImageMenu.hide();
// callback({event:"clickCancelButton"})
this.hide()
} else if (e.clientX < 5 || e.clientX > screenWidth - 5 || e.clientY < 5) {
//屏幕左右边缘5像素及菜单顶部5像素不处理点击
} else { //点击了图标按钮
......@@ -144,8 +172,10 @@ export default {
// console.log("点击按钮的序号: " + iClickIndex);
// if (iClickIndex >= 0 && iClickIndex <= 5) { //处理具体的点击逻辑,此处也可以自行定义逻辑。如果增减了按钮,此处也需要跟着修改
// }
callback(iClickIndex)
this.hide()
callback({
event: "clickMenu",
index: iClickIndex
})
}
})
/* nvImageMenu.addEventListener("touchstart", function(e) {
......@@ -161,9 +191,13 @@ export default {
//TODO 这里可以处理释放背景恢复的效果
})
*/
},
hide(){
}
hide() {
nvMask.hide()
nvImageMenu.hide()
this.isShow = false
}
}
export default NvImageMenu
import uniImageMenu from './uni-image-menu.js';
export default async (param,callback) => {
import UniImageMenu from './uni-image-menu.js';
class UniShare extends UniImageMenu{
constructor(arg) {
super()
this.isShow = super.isShow
}
async show(param, callback){
var menus = []
plus.share.getServices(services => { //只显示有服务的项目
services = services.filter(item=>item.nativeClient)
// console.log("servicesList",services);
services = services.filter(item => item.nativeClient)
let servicesList = services.map(e => e.id)
param.menus.forEach(item => {
if (servicesList.includes(item.share.provider) || typeof(item.share) == 'string') {
menus.push(item)
}
})
// console.log(menus);
uniImageMenu.show({list:menus,cancelText:param.cancelText}, e => {
if (typeof(menus[e]['share']) == 'string') {
switch (menus[e]['share']){
case "copyurl":
copyurl()
break;
case "shareSystem":
shareSystem()
break;
default:
console.error('未知事件名称:'+menus[e]['share']);
break;
}
super.show({
list: menus,
cancelText: param.cancelText
}, e => {
callback(e)
if(e.event == 'clickMenu'){
if (typeof(menus[e.index]['share']) == 'string') {
this[menus[e.index]['share']](param)
} else {
console.log(123456,{
...param.content,
...menus[e].share,
});
uni.share({
...param.content,
...menus[e].share,
success: function(res) {
...menus[e.index].share,
success: res=> {
console.log("success:" + JSON.stringify(res));
super.hide()
},
fail: function(err) {
console.log("fail:" + JSON.stringify(err));
uni.showModal({
content: JSON.stringify(err),
showCancel: false,
confirmText:"知道了"
confirmText: "知道了"
});
},
complete(e) {
uniImageMenu.hide()
callback(e)
}
})
}
}
})
}, err => {
uni.showModal({
title: '获取服务供应商失败:' + JSON.stringify(err),
......@@ -59,17 +50,22 @@ export default async (param,callback) => {
});
console.error('获取服务供应商失败:' + JSON.stringify(err));
})
function copyurl() {
}
hide(){
super.hide()
}
copyurl(param) {
console.log('copyurl',param);
uni.setClipboardData({
data: param.content.href,
success: function () {
success: ()=>{
console.log('success');
uni.hideToast()//关闭自带的toast
uni.hideToast() //关闭自带的toast
uni.showToast({
title: '复制成功',
icon: 'none'
});
super.hide();
},
fail: (err) => {
uni.showModal({
......@@ -80,17 +76,23 @@ export default async (param,callback) => {
});
}
// 使用系统分享发送分享消息
function shareSystem() {
shareSystem(param) {
console.log('shareSystem',param);
plus.share.sendWithSystem({
type: 'text',
content: param.content.title + param.content.summary || '',
href: param.content.href,
}, function(e) {
}, (e)=> {
console.log('分享成功');
callback(e)
}, function(e) {
console.log('分享失败:' + JSON.stringify(e));
callback(e)
super.hide()
}, (err)=> {
console.log('分享失败:' + JSON.stringify(err));
uni.showModal({
title: '获取服务供应商失败:' + JSON.stringify(err),
showCancel: false,
confirmText: '知道了'
});
});
}
}
export default UniShare
\ No newline at end of file
{
"id": "uni-share",
"displayName": "uni-share",
"version": "1.0.6",
"version": "2.0.0",
"description": "底部弹出宫格图标式的分享菜单,可覆盖原生组件。",
"keywords": [
"分享菜单"
......
......@@ -9,7 +9,7 @@
export default {
methods: {
uniShare() {
uniShare({
uniShare.show({
content: { //公共的分享参数配置 类型(type)、链接(herf)、标题(title)、summary(描述)、imageUrl(缩略图)
type: 0,
href: 'https://uniapp.dcloud.io/',
......
......@@ -193,6 +193,9 @@
"key" : ""
}
}
},
"router" : {
"base" : ""
}
},
"_spaceID" : "76ce2c5e-31c7-4d81-8fcf-ed1541ecbc6e",
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册