uniapp 实现微信小程序全局分享及自定义分享按钮样式

本文介绍了在uniapp中实现微信小程序的全局转发和分享到朋友圈功能,利用Vue.js的全局混入。详细阐述了创建全局分享内容文件、在main.js中注册、自定义页面分享内容以及实现自定义分享按钮样式的步骤和代码,通过覆盖原分享按钮实现自定义视觉效果。

uniapp 实现微信小程序的全局 转发给好友/分享到朋友圈 的功能。主要使用 Vue.js 的 全局混入 概念。

下面直接上 实现步骤和代码:

创建全局分享内容文件

1.创建一个全局分享的 js 文件。示例文件路径为:@/common/share.js ,在该文件中定义全局分享的内容:

export default {
	data() {
		return {
			// 默认的全局分享内容
			share: {
				title: '全局分享的标题',
				path: '/pages/home/home',    // 全局分享的路径,比如 首页
				imageUrl: '/static/imgs/fenxiang-img.png',    // 全局分享的图片(可本地可网络)
			}
		}
	},
	// 定义全局分享
	// 1.发送给朋友
    onShareAppMessage(res) {
        return {
			title: this.share.title,
			path: this.share.path,
			imageUrl: this.share.imageUrl,
		}
    },
	//2.分享到朋友圈
    onShareTimeline(res) {
        return {
			title: this.share.title,
			path: this.share.path,
			imageUrl: this.share.imageUrl,
		}
    },
}

引入并全局注册该文件

2.在项目的 main.js 文件中引入该 share.js 文件并使用Vue.mixin() 方法将之全局混入

// 导入并挂载全局的分享方法
import share from '@/common/share.js'
Vue.mixin(share)

下面来看一下全局的分享效果:

自定义页面分享内容

3.如果在特定页面需要自定义分享内容,也仍旧可以使用页面的onShareAppMessage()onShareTimeline() 方法自定义分享的内容,全局的分享会被页面定义的分享内容覆盖。示例如下:

    onLoad() {},

    // 自定义此页面的转发给好友(已经有全局的分享方法,此处会覆盖全局)
	onShareAppMessage(res) {
	    return {
	      title: '页面分享的标题',
	      path: '/pages/my/my',
		  imageUrl: '/static/imgs/mylogo.png'
	    }
	  },
	  // 自定义页面的分享到朋友圈
	onShareTimeline(res) {
		return {
			title: '页面分享的标题',
			path: '/pages/my/my',
			imageUrl: '/static/imgs/mylogo.png'
		}
	},

注:onShareAppMessage() 和onShareTimeline() 方法是和onLoad ,methods 等方法同级的。

实现自定义分享按钮样式的效果

效果展示:

解析:以上两种风格都是比较常见的微信小程序分享按钮自定义样式,然而实际我们并非是对 按钮进行这样的自定义样式,而是将这样的样式做到 上或者直接是一个 image 图片,而要实现点击它触发分享,我们只需要在它的上面盖一个 按钮,这个按钮当然就是用来触发我们的分享功能的,而我们只需要让它的透明度为完全透明就好了,这样一搭配起来,我们效果上就好像实现了对分享按钮的自定义一般。示例代码如下:

1.HTML 代码如下

<!-- 一键分享 -->
<view class="share">
    <u-image src="/static/imgs/yjfx.png" width="110" height="110"></u-image>
    <u-button id="shareBtn" open-type="share" ></u-button>
</view>

2.CSS 代码如下(这里采用的是 SCSS 的写法)

    .share {
			width: 110rpx;
			height: 110rpx;
			border-radius: 50%;
			position: absolute;
			top: 50%;
			right: 29rpx;
			#shareBtn {
				width: 100%;
				height: 100%;
				position: absolute;
				top: 0;
				left: 0;
				opacity: 0;
			}
		}

这样我们就实现了 “自定义分享按钮” 的效果了,核心之处就在与放一个分享按钮到我们自定义样式部位的上方,让分享按钮完全盖住它并且让这个分享按钮完全透明即可。

### 实现顶部按钮自定义样式和功能 在UniApp开发微信小程序时,可以通过多种方式来实现顶部导航栏按钮自定义样式和功能。这不仅有助于提高用户体验,还能使应用程序更具个性化。 #### 使用`custom-nav-bar`组件来自定义导航栏 为了更好地控制导航栏的设计,可以创建一个名为`custom-nav-bar.vue`的新组件[^1]: ```vue <template> <view class="nav-bar"> <!-- 左侧返回按钮 --> <image @click="back" src="/static/back.png"></image> <!-- 中间的标题 --> <text>{{ title }}</text> <!-- 右边的操作按钮 --> <button v-if="showRightButton">操作</button> </view> </template> <script> export default { props: ['title', 'showRightButton'], methods: { back() { uni.navigateBack(); } } } </script> <style scoped> .nav-bar { display: flex; justify-content: space-between; align-items: center; padding: 0 20rpx; height: 88rpx; /* 微信默认高度 */ } /* 自定义背景颜色和其他样式 */ .nav-bar { background-color: linear-gradient(to right, #ff7e5f, #feb47b); } </style> ``` 此代码片段展示了如何构建一个简单的可重用导航栏组件,其中包含了左侧的返回图标、中间的应用程序名称或页面标题以及右侧的一个可选操作按钮。通过传递不同的属性值给这个组件实例,可以在不同场景下灵活调整显示的内容。 对于提到的具体问题——即原生导航栏底部存在一条明显的分隔线影响整体美感的情况,解决方案是在全局配置文件(`pages.json`)中设置`navigationStyle`参数为`custom`模式,并移除原有的系统自带导航条[^2]: ```json { "globalStyle": { "navigationBarTextStyle": "black", "navigationBarTitleText": "", "backgroundColorTop": "#ffffff", "backgroundColorBottom": "#ffffff", "navigationStyle": "custom" }, ... } ``` 这样做之后就可以完全隐藏掉原始的顶部区域并替换为自己编写的HTML结构了。需要注意的是,在某些情况下可能还需要额外处理状态栏的高度差异等问题以确保适配各种设备屏幕尺寸。 #### 处理特殊需求下的样式微调 当遇到像渐变色这样的复杂视觉效果时,则需要借助于CSS3的强大能力来进行更精细地定制化工作。上述例子中的`.nav-bar`类已经示范了一个简单版本的颜色过渡方案;如果想要进一步优化外观表现力的话,不妨考虑引入更多高级特性比如阴影、圆角等元素。 另外值得注意的一点是,虽然这里介绍的方法适用于大多数常规情况,但在实际项目里可能会碰到一些特殊情况(例如深色主题的支持),这时就需要针对具体情况进行相应的扩展和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值