towxml
是一個把html、markdown內容解析成微信小程序可顯示的庫。 擁有極致的內容排版和高容錯的解析。javascript
因爲小程序audio
標籤在部分iOS設備上不能被播放。 在2.1.0
版本中,towxml
支持了audio標籤的解析,播放器容許自定義樣式。在iOS上也能完美播放audio了。css
towxml
能解析絕大部分HTML標籤,甚至支持代碼高亮及Markdown Todo List。除此以外,還容許爲解析出的內容添加事件。支持全部的小程序開發框架,例如:wepy...。html
** 項目地址猛戳:** github.com/sbfkcel/tow…java
git clone https://github.com/sbfkcel/towxml.git
複製代碼
//app.js
const Towxml = require('/towxml/main'); //引入towxml庫
App({
onLaunch: function () {
},
towxml:new Towxml() //建立towxml對象,供小程序頁面使用
})
複製代碼
<!--pages/index.wxml-->
<!--引入towxml模版入口文件,並使用模版-->
<import src="/towxml/entry.wxml"/>
<template is="entry" data="{{...article}}"/>
複製代碼
//pages/index.js
const app = getApp();
Page({
data: {
//article將用來存儲towxml數據
article:{}
},
onLoad: function () {
const _ts = this;
//請求markdown文件,並轉換爲內容
wx.request({
url: 'http://xxx/doc.md',
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: (res) => {
//將markdown內容轉換爲towxml數據
let data = app.towxml.toJson(
res.data, // `markdown`或`html`文本內容
'markdown', // `markdown`或`html`
_ts // 當前頁面的`this`(2.1.0或以上的版本該參數不可省略)
);
//設置文檔顯示主題,默認'light'
data.theme = 'dark';
//設置數據
_ts.setData({
article: data
});
}
});
}
})
複製代碼
/**pages/index.wxss**/
/**基礎風格樣式**/
@import '/towxml/style/main.wxss';
/**若是頁面有動態主題切換,則須要將使用到的樣式所有引入**/
/**主題配色(淺色樣式)**/
@import '/towxml/style/theme/light.wxss';
/**主題配色(深色樣式)**/
@import '/towxml/style/theme/dark.wxss';
複製代碼
towxml
2.1.0支持的事件以下node
'bind:touchstart',
'bind:touchmove',
'bind:touchcancel',
'bind:touchend',
'bind:tap',
# 2.1.0或以上的版本不支持如下事件(可自行修改`lib/tagsAndAttrs.js`中的事件解析部分,而後執行`node outTemplate.js`生成新的解析模版)
'bind:longpress',
'bind:longtap',
'bind:transitionend',
'bind:animationstart',
'bind:animationiteration',
'bind:animationend',
'bind:touchforcechange'
複製代碼
Page({
data: {
isloading: true,
article: {}
},
onLoad: function () {
const _ts = this;
//將markdown內容轉換爲towxml數據,交將當前頁面對象傳入以建立默認事件對象
let articleData = app.towxml.toJson('<div name="button" id="button1">測試一個可點擊的元素</div>', 'html', _ts);
//自定義事件,格式爲`event_`+`綁定類型`+`_`+`事件類型`
//例如`bind:touchstart`則爲:
this['event_bind_touchstart'] = (event)=>{
console.log(event.target.dataset._el); // 打印出元素信息
};
// 給todoList添加監聽事件
this['eventRun_todo_checkboxChange'] = (event)=>{
console.log(event.detail); // todoList checkbox發生change事件
};
//設置文章數據,並清除頁面loading
_ts.setData({
article: articleData,
isloading: false
});
}
})
複製代碼