请求解析
This commit is contained in:
1 parent
0b9c772cfc
commit
bb18cb696a
14 files changed
+1241
No files matched your search
+169
@@ -0,0 +1,169 @@
|
||||
//Parser组件
|
||||
const html2nodes = require('./Parser.js');
|
||||
const initData = function(Component) {
|
||||
setTimeout(() => {
|
||||
Component.createSelectorQuery().select('#contain').boundingClientRect(res => {
|
||||
Component.triggerEvent('ready', res);
|
||||
}).exec();
|
||||
Component.videoContext = [];
|
||||
let nodes = [Component.selectComponent('#contain')];
|
||||
nodes = nodes.concat(Component.selectAllComponents('#contain>>>#node'));
|
||||
for (let node of nodes) {
|
||||
for (let item of node.data.nodes) {
|
||||
if (item.name == 'video') {
|
||||
Component.videoContext.push({
|
||||
id: item.attrs.id,
|
||||
context: wx.createVideoContext(item.attrs.id, node)
|
||||
});
|
||||
} else if (item.name == 'audio' && item.attrs.autoplay)
|
||||
wx.createAudioContext(item.attrs.id, node).play();
|
||||
}
|
||||
}
|
||||
}, 10)
|
||||
}
|
||||
Component({
|
||||
properties: {
|
||||
'html': {
|
||||
type: String,
|
||||
value: '',
|
||||
observer: function(html) {
|
||||
let hideAnimation = {},
|
||||
showAnimation = {};
|
||||
if (this.data.showWithAnimation) {
|
||||
hideAnimation = wx.createAnimation({
|
||||
duration: this.data.animationDuration,
|
||||
timingFunction: "ease"
|
||||
}).opacity(0).step().export();
|
||||
showAnimation = wx.createAnimation({
|
||||
duration: this.data.animationDuration,
|
||||
timingFunction: "ease"
|
||||
}).opacity(1).step().export();
|
||||
}
|
||||
if (!html) {
|
||||
this.setData({
|
||||
nodes: []
|
||||
})
|
||||
} else if (typeof html == 'string') {
|
||||
html2nodes(html, this.data.tagStyle).then(res => {
|
||||
this.setData({
|
||||
nodes: res.nodes,
|
||||
controls: {
|
||||
imgMode: this.data.imgMode
|
||||
},
|
||||
showAnimation,
|
||||
hideAnimation
|
||||
}, initData(this))
|
||||
if (res.title && this.data.autosetTitle) {
|
||||
wx.setNavigationBarTitle({
|
||||
title: res.title
|
||||
})
|
||||
}
|
||||
this.imgList = res.imgList;
|
||||
this.triggerEvent('parse', res);
|
||||
}).catch(err => {
|
||||
this.triggerEvent('error', err);
|
||||
})
|
||||
} else if (html.constructor == Array) {
|
||||
this.setData({
|
||||
controls: {
|
||||
imgMode: this.data.imgMode
|
||||
},
|
||||
showAnimation,
|
||||
hideAnimation
|
||||
}, initData(this))
|
||||
this.imgList = [];
|
||||
} else if (typeof html == 'object') {
|
||||
if (!html.nodes || html.nodes.constructor != Array) {
|
||||
this.triggerEvent('error', {
|
||||
message: "传入的nodes数组格式不正确!应该传入的类型是array,实际传入的类型是:" + typeof html.nodes
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.setData({
|
||||
controls: {
|
||||
imgMode: this.data.imgMode
|
||||
},
|
||||
showAnimation,
|
||||
hideAnimation
|
||||
}, initData(this))
|
||||
if (html.title && this.data.autosetTitle) {
|
||||
wx.setNavigationBarTitle({
|
||||
title: html.title
|
||||
})
|
||||
}
|
||||
this.imgList = html.imgList || [];
|
||||
} else {
|
||||
this.triggerEvent('error', {
|
||||
message: "错误的html类型:" + typeof html
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
'autocopy': {
|
||||
type: Boolean,
|
||||
value: true
|
||||
},
|
||||
'autopause': {
|
||||
type: Boolean,
|
||||
value: true
|
||||
},
|
||||
'autosetTitle':{
|
||||
type: Boolean,
|
||||
value: true
|
||||
},
|
||||
'imgMode': {
|
||||
type: String,
|
||||
value: "default"
|
||||
},
|
||||
'selectable': {
|
||||
type: Boolean,
|
||||
value: true
|
||||
},
|
||||
'tagStyle': {
|
||||
type: Object,
|
||||
value: { video:"width:100%" }
|
||||
},
|
||||
'showWithAnimation': {
|
||||
type: Boolean,
|
||||
value: false
|
||||
},
|
||||
'animationDuration': {
|
||||
type: Number,
|
||||
value: 400
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
//事件
|
||||
tapEvent(e) {
|
||||
if (this.data.autocopy && e.detail && /^http/.test(e.detail)) {
|
||||
wx.setClipboardData({
|
||||
data: e.detail,
|
||||
success() {
|
||||
wx.showToast({
|
||||
title: '链接已复制',
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
this.triggerEvent('linkpress', e.detail);
|
||||
},
|
||||
errorEvent(e) {
|
||||
this.triggerEvent('error', e.detail);
|
||||
},
|
||||
//内部方法
|
||||
_previewImg(e) {
|
||||
wx.previewImage({
|
||||
current: e.detail,
|
||||
urls: this.imgList.length ? this.imgList : [e.detail],
|
||||
})
|
||||
},
|
||||
_playVideo(e) {
|
||||
if (this.videoContext.length > 1 && this.data.autopause) {
|
||||
for (let video of this.videoContext) {
|
||||
if (video.id == e.detail) continue;
|
||||
video.context.pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in new issue
Block a user