概述
目录
- 概要
- 实现示例
- Tips
- 关注我,不迷路
概要
关注微信公众号组件,官方提供了official-account,只有在固定的场景下才会显示,比如扫码进入的小程序才会显示。更多相关场景:开发能力/official-account。
公众号组件official-account,本身样式是固定的,也不支持修改样式。但是在做微信小程序的时候,有个需求就是把关注公众号的组件改成一个按钮,不要问为什么,因为有现成的别人家的小程序就可以点击一个按钮去关注公众号。于是在网上搜了一些案例,发现没一个靠谱的。不过后来,被我攻破了这个难关。那么我就把这个关注公众号组件自定义样式方法分享出来。
下面的实现案例,使用了uniapp打包,仅做参考。如需在原生微信小程序中使用,则需要读懂代码,在此基础上依葫芦画瓢。
实现示例
变身前:
变身后:
实现示例:
<template>
<view class="weixin-official-account" v-if="show" :style="{'bottom':`${bottom}rpx`,'opacity':opacity}">
<text class="txt">关注微信公众号,海量资料任你查阅!</text>
<button type="default" class="btn btn-official"> 立即关注<official-account class="official-account" id="official_account"></official-account>
</button>
<icon class="iconfont icon-close" @click="close"></icon>
</view>
</template>
<script>
export default {
props: {
bottom: {
type: [Number, String],
default: 100
},
isFollow: {// 是否已经关注过公众号
type: [Boolean],
default: false
}
},
data() {
return {
show: true,
opacity: 0,
max: 3
}
},
mounted() {
setTimeout(() => {
this.init();
}, 800)
},
methods: {
init() {
let that = this;
const query = uni.createSelectorQuery().in(this);
query.select('#official_account').boundingClientRect(data => {
if (data.width && data.height) {
that.check();
} else {
that.show = false;
}
}).exec();
},
async check() {
try {
const num = uni.getStorageSync('CLOSE_OFFICIAL_ACCOUNT');
if (+num >= this.max) {
this.show = false;
return false;
}
this.show = !this.isFollow;
if (this.show) this.opacity = 1;
} catch (e) {
this.show = false;
}
},
close() {
this.show = false;
const num = uni.getStorageSync('CLOSE_OFFICIAL_ACCOUNT') ? +uni.getStorageSync('CLOSE_OFFICIAL_ACCOUNT') + 1 : 1;
uni.setStorageSync('CLOSE_OFFICIAL_ACCOUNT', num);
}
}
}
</script>
<style scoped lang="scss">
.weixin-official-account {
position: fixed;
z-index: 20211208;
left: 50%;
transform: translateX(-50%);
display: flex;
align-items: center;
justify-content: space-between;
width: 682rpx;
height: 68rpx;
padding: 0 10rpx 0 30rpx;
background: rgba(0, 0, 0, .6);
border-radius: 6rpx;
.txt {
font-size: 24rpx;
color: #fff;
}
.btn {
position: relative;
width: 56px;
height: 20px;
line-height: 20px;
padding: 0;
background: #2878FF;
border-radius: 10px;
overflow: hidden;
text-align: center;
font-size: 20rpx;
color: #fff;
.official-account {
position: absolute;
z-index: 20211209;
right: -14px;
top: -40px;
opacity: 0;
}
}
.icon-close {
display: flex;
align-items: center;
justify-content: center;
width: 50rpx;
height: 68rpx;
font-size: 22rpx;
color: #fff;
}
}
@font-face {
font-family: 'iconfont';
src: url(data:font/truetype;charset=utf-8;base64,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) format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 32rpx;
font-style: normal;
font-weight: normal;
vertical-align: middle;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-close:before {
content: "e670";
}
</style>
Tips
- 此案例可以直接当成一个组件使用,需要改样式及文字,可以自行修改,这里展示的仅做参考,最重要的是思路。
- isFollow表示是否关注过公众号,我处理的思路是通过后端接口判断是否关注过公众号,关注过就不显示该组件了,仅做参考。
- max 表示最多点几次关闭按钮,就不再显示该组件了,仅做参考。
- 主要思路:先让组件显示,但是透明度为0=》然后判断组件的宽高,有宽高说明该场景可以显示公众号组件=》通过是否关注过公众号,判断是否显示=》最终的目的就是显示自己定义的按钮,在按钮上面其实是覆盖了公众号组件,位置刚好调整在关注的按钮上面,透明度为0,所以看到的就是自己的按钮,点击的其实还是组件上的按钮。
关注我,不迷路
小伙伴,用你可爱的小手,点个赞,关注我了解更多知识!!!
如果任何疑问的可以在评论区留言或者私聊。
也可以扫下面二维码加我wx,备注‘地区-名字-技术类型’,我会拉进我的微信技术分享群。注意:必须备注清楚哈。
也可以加QQ群交流:568984539,加群备注‘地区-名字-技术类型’。
更多前端、uniapp、nodejs等相关知识可关注我个人博客:https://blog.csdn.net/qq_42961150?spm=1011.2124.3001.5343
最后
以上就是细心曲奇为你收集整理的微信小程序:关注公众号组件自定义样式的全部内容,希望文章能够帮你解决微信小程序:关注公众号组件自定义样式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复