Eine WeChat-Frontend-Ansichtskomponente
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
Ausführliche Erläuterungen zur Funktionsweise finden Sie in der Dokumentation zum Vue-Loader.
Quellcode: https://github.com/doterlin/vue-wxChat Demo-Adresse: https://doterlin.github.io/vue-wxChat/
# install dependencies
npm install
# serve with hot reload at localhost:8080
npm run dev
# build for production with minification
npm run build
语音类
wird in Zukunft unterstützt).滚动加载数据
, wobei das scrollende Laden auf einer anderen meiner Komponenten basiert, scrollLoader.vue („Vue.js nach oben und unten scrollende Ladekomponente“).v-emotion
global. Der Code lautet wie main.js
: function toEmotion(text, isNoGif){
var list = ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴', '睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶', '难过', '酷', '冷汗', '抓狂', '吐', '偷笑', '愉快', '白眼', '傲慢', '饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂', '疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见', '擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼', '哈欠', '鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀', '西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头', '玫瑰', '凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀', '足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱', '强', '弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你', 'NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火', '转圈', '磕头', '回头', '跳绳', '挥手', '激动', '街舞', '献吻', '左太极', '右太极', '嘿哈', '捂脸', '奸笑', '机智', '皱眉', '耶', '红包', '鸡'];
if (!text) {
return text;
}
text = text.replace(/[[u4E00-u9FA5]{1,3}]/gi, function(word){
var newWord = word.replace(/[|]/gi,'');
var index = list.indexOf(newWord);
var backgroundPositionX = -index * 24
var imgHTML = '';
if(index<0){
return word;
}
if (isNoGif) {
if(index>104){
return word;
}
imgHTML = `<i class="static-emotion" style="background:url(https://res.wx.qq.com/mpres/htmledition/images/icon/emotion/default218877.gif) ${backgroundPositionX}px 0;"></i>`
} else {
var path = index>104 ? '/img' : 'https://res.wx.qq.com/mpres/htmledition/images/icon';
imgHTML = `![](${path}/emotion/${index}.gif)`
}
return imgHTML;
});
return text;
}
Vue.directive('emotion', {
bind: function (el, binding) {
el.innerHTML = toEmotion(binding.value)
}
});
##Wie benutzt man? Die Parameter wurden in der Komponente beschrieben und in App.vue
demonstriert: Parameter und Beschreibung: Visuelle WeChat-Chat-Komponente Hängt von der scrollLoader-Komponente und der Anweisung v-emotion ab (siehe main.js für die Implementierung)
Parameter : width
der Komponentenbreite, Standard 450. wrapBg
Hintergrundfarbe des äußeren übergeordneten Elements, Standard. #efefef maxHeight
maximale Höhe des Anzeigefensters, Standard 900. contactAvatarUrl
Avatar-URL des Freundes ownerAvatarUrl
Avatar-URL des WeChat-Besitzers ownerNickname
Spitzname des WeChat-Besitzers getUpperData
(erforderlich) Wird beim Scrollen nach oben geladen. Daten Bei der Methode muss der Rückgabewert ein Promise-Objekt sein und die Struktur der Auflösung ist dieselbe wie bei den Daten getUnderData
(Erforderlich) Methode zum Laden von Daten beim Scrollen nach unten. Der Rückgabewert ist derselbe wie oben data
(Erforderlich) Übergeben Sie die Initialisierungsdaten.
[{
direction: 2, //为2表示微信主人发出的消息,1表示联系人
id: 1, //根据这个来排序消息
type: 1, //1为文本,2为图片
content: '你好!![呲牙]', //当type为1时这里是文本消息,当type2为2时这里要存放图片地址;后续会支持语音的显示
ctime: new Date().toLocaleString() //显示当前消息的发送时间
},
{
direction: 1,
id: 2,
type: 1,
content: '你也好。[害羞]',
ctime: new Date().toLocaleString()
}]
Wirkung: https://doterlin.github.io/vue-wxChat/ Code:
//主文件,对wxChat的用法做示例
<template>
<wxChat
:data="wxChatData"
:showShade="false"
contactNickname="简叔"
:getUpperData="getUpperData"
:getUnderData="getUnderData"
:ownerAvatarUrl="ownerAvatarUrl"
:contactAvatarUrl="contactAvatarUrl"
:width="420">
</wxChat>
</template>
<script>
import wxChat from './components/wxChat.vue'
export default {
name: 'app',
data () {
return {
upperTimes: 0,
underTimes: 0,
upperId: 0,
underId: 6,
ownerAvatarUrl: './src/assets/avatar1.png',
contactAvatarUrl: './src/assets/avatar2.png',
wxChatData: [{
direction: 2,
id: 1,
type: 1,
content: '你好!![呲牙]',
ctime: new Date().toLocaleString()
},
{
direction: 1,
id: 2,
type: 1,
content: '你也好。[害羞]',
ctime: new Date().toLocaleString()
},
{
direction: 2,
id: 3,
type: 1,
content: '这是我的简历头像:',
ctime: new Date().toLocaleString()
},
{
direction: 2,
id: 4,
type: 2,
content: './src/assets/wyz.jpg',
ctime: new Date().toLocaleString()
},
{
direction: 1,
id: 5,
type: 1,
content: '你开心就好。[微笑]',
ctime: new Date().toLocaleString()
}]
}
},
components:{wxChat},
methods:{
//向上滚动加载数据
getUpperData(){
var me = this;
// 这里为模拟异步加载数据
// 实际上你可能要这么写:
// return axios.get('xxx').then(function(result){
// return result; //result的格式需要类似下面resolve里面的数组
// })
return new Promise(function(resolve){
setTimeout(function(){
//模拟加载完毕
if(me.upperTimes>3){
return resolve([]);
}
//加载数据
resolve([{
direction: 2,
id: me.upperId-1,
type: 1,
content: '向上滚动加载第 ' + me.upperTimes +' 条!',
ctime: new Date().toLocaleString()
},
{
direction: 1,
id: me.upperId-2,
type: 1,
content: '向上滚动加载第 ' + me.upperTimes +' 条!',
ctime: new Date().toLocaleString()
}]
)
}, 1000);
me.upperId= me.upperId+2;
me.upperTimes++;
})
},
getUnderData(){
var me = this;
//意义同getUpperData()
return new Promise(function(resolve){
setTimeout(function(){
//模拟加载完毕
if(me.underTimes>3){
return resolve([]);
}
//加载数据
resolve(
[{
direction: 1,
id: me.underId+1,
type: 1,
content: '向下滚动加载第 ' + me.underTimes +' 条!',
ctime: new Date().toLocaleString()
},
{
direction: 2,
id: me.underId+2,
type: 1,
content: '向下滚动加载第 ' + me.underTimes +' 条!',
ctime: new Date().toLocaleString()
}]
)
}, 1000);
me.underId = me.underId+2;
me.underTimes++;
})
}
}
}
</script>
<style>
*{
margin: 0;
padding: 0;
}
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
h1, h2 {
font-weight: normal;
}
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
}
</style>
Willkommen zum Start: https://github.com/doterlin/vue-wxChat