整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          小程序的HTML和Markdown格式的富文本渲染組件,支持代碼高亮!

          今天為大家帶來的是一個用于在微信小程序中渲染html和Markdown的富文本組件,而且支持代碼高亮,它就是html2wxml!






          Github

          https://github.com/qwqoffice/html2wxml

          三種版本介紹

          • 插件版本準備

          1、打開小程序管理后臺,轉到設置 - 第三方服務,點擊添加插件



          2、搜索 html2wxml ,選中并添加


          3、添加成功


          4、回到小程序開發環境,編輯 app.json ,添加插件聲明,最新版為 1.3.0

          "plugins": {
           	"htmltowxml": {
           		"version": "1.3.0",
           		"provider": "wxa51b9c855ae38f3c"
           	}
           }

          5、在對應頁面的 json 文件,比如首頁 index.json,添加使用插件組件的聲明

           "usingComponents": {
           	"htmltowxml": "plugin://htmltowxml/view"
           }
          • 組件版本準備

          1、復制整個 html2wxml-component 文件夾到小程序目錄

          2、在對應頁面的 json 文件,比如首頁 index.json,添加使用組件的聲明,注意路徑

           "usingComponents": {
           	"htmltowxml": "path/to/html2wxml-component/html2wxml"
           } 
          • 模板版本準備

          1、復制整個 html2wxml-template 文件夾到小程序目錄

          2、在對應頁面的 js 文件,比如首頁 index.js,添加引用聲明,并使用html2wxml方法進行數據綁定,注意路徑,參數分別為綁定的數據名、已解析的富文本數據、當前頁面對象和容器與屏幕邊緣的單邊的距離

           var html2wxml = require('path/to/html2wxml-template/html2wxml.js');
           html2wxml.html2wxml('article', res.data, this, 5);

          3、在對應頁面的 wxml 文件,比如首頁 index.wxml,添加引用模板的聲明,并使用模板,注意路徑和綁定的數據名

           <import src="path/to/html2wxml-template/html2wxml.wxml" />
           <template is="html2wxml" data="{{wxmlData:article}}" />

          4、在對應頁面的 wxss 文件,比如首頁 index.wxss或app.wxss, 引入樣式表和你喜歡的代碼高亮樣式,注意路徑

          @import "path/to/html2wxml-template/html2wxml.wxss";
          @import "path/to/html2wxml-template/highlight-styles/darcula.wxss";

          組件使用


          • 示例
          // 將Page中的content數據作為HTML格式渲染
          <htmltowxml text="{{content}}" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          
          // 禁用代碼高亮功能
          <htmltowxml text="{{content}}" highlight="{{false}}" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          
          // 禁用代碼行號顯示功能
          <htmltowxml text="{{content}}" linenums="{{false}}" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          
          // 代碼高亮樣式改為tomorrow
          <htmltowxml text="{{content}}" highlightStyle="tomorrow" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          
          // 設置代碼高亮檢測語言 (最多6個,自行搭建服務不受限制)
          <htmltowxml text="{{content}}" highlightLanguages="{{['html','js','php','css','cpp','ruby']}}" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          
          // 對HTML數據中的img標簽的相對路徑補全域名
          <htmltowxml text="{{content}}" imghost="https://www.qwqoffice.com" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          
          // 禁用加載中動畫
          <htmltowxml text="{{content}}" showLoading="{{false}}" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          
          // 將Page中的text數據作為Markdown格式渲染
          <htmltowxml text="{{text}}" type="md" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          
          // 直接渲染Page中的已經過解析的obj數據
          <htmltowxml json="{{obj}}" bindWxmlTagATap="wxmlTagATap" ></htmltowxml>
          • 服務端用法

          富文本的解析默認是由QwqOffice完成,存在不穩定因素,你可以自行搭建解析服務或將解析組件引入到你的項目中。

          1、復制整個 html2wxml-php 文件夾到項目目錄中

          2、引入類文件class.ToWXML.php

           include( 'path/to/html2wxml-php/class.ToWXML.php' );

          3、實例化html2wxml,進行解析并輸出,示例:

           $towxml = new ToWXML();
           $json = $towxml->towxml( '<h1>H1標題</h1>', array(
           	'type' => 'html',
           	'highlight' => true,
           	'linenums' => true,
           	'imghost' => null,
           	'encode' => false,
           	'highlight_languages' => array( 'html', 'js', 'php', 'css' )
           ) );
           echo json_encode( $json, JSON_UNESCAPED_UNICODE );


          可用的代碼高亮語言

          多人在使用 CSS 時,對 Display, Visibility 和 Overflow 三個屬性的理解并不是很清晰,這里就對這三個屬性做一下分析,對應三個屬性在使用時的區別.

          Display

          display 用來設置或檢索對象是否及如何顯示。

          • display: none

          display 屬性為 none 時,隱藏標簽對象。不會為對象保留其位置空間,它下面所在的元素會被自動上移占有被隱藏標簽位置。

          HTML 代碼:

          <div id="a">A</div>
          <div id="b">B</div>
          <div id="c">C</div>

          CSS代碼:

          div{
              width: 200px;
              height: 100px;
          }
          #a{
              background-color: red;
          }
          #b{
              
              background-color: green;
              display: none;
          }
          #c{
              background-color: blue;
          }

          效果如下:

          • display: block

          display 屬性為 block 時,默認有顯示標簽的意義,同時可以將標簽轉換為塊元素顯示,這時標簽會獨占一行,并且可以設置寬高屬性。

          HTML 代碼:

          <span id="a">A</span>
          <span id="b">B</span>
          <span id="c">C</span>

          CSS代碼:

          span{
              width: 200px;
              height: 100px;
              font-size: 50px;
              color: gray;
          }
          #a{
              background-color: red;
          }
          #b{
              
              background-color: green;
          }
          #c{
              background-color: blue;
              display: block;
          }

          效果如下:

          • display: inline

          display 屬性為 inline 時,指定對象為內聯元素,此時對象的寬高屬性不在有效,元素大小取決于實際內容大小。

          HTML 代碼:

          <div id="a">A</div>
          <div id="b">B</div>
          <div id="c">C</div>

          CSS代碼:

          div{
              width: 200px;
              height: 100px;
              font-size: 50px;
              color: gray;
              display: inline;
          }
          #a{
              background-color: red;
          }
          #b{
              background-color: green;
          }
          #c{
              background-color: blue;
          }

          效果如下:

          Visibility

          visibility 屬性用來設置或檢索是否顯示對象。與 display 屬性不同,該屬性為隱藏的對象保留其占據的物理空間, 該屬性默認值為 visible, 設置對象可見。

          • visibility: hidden

          visibility 屬性為 hidden 時,隱藏標簽對象。但該對象所占用的位置空間會被保留。

          HTML代碼:

          <div id="a">A</div>
          <div id="b">B</div>
          <div id="c">C</div>

          CSS代碼:

          div{
              width: 200px;
              height: 100px;
              font-size: 50px;
              color: gray;
          }
          #a{
              background-color: red;
          }
          #b{
              background-color: green;
              visibility: hidden;
          }
          #c{
              background-color: blue;
          }

          效果如下:

          Overflow

          overflow 屬性用來檢索或設置當對象的內容超過其指定高度及寬度時如何管理內容。

          • overflow: visible

          overflow 默認值為 visible, 作用是按實際效果顯示 ,不剪切超出范圍的內容 。

          HTML 代碼:

          <div id="a">
              <div id="b"></div>
          </div>

          CSS代碼:

          #a{
              width: 300px;
              height: 100px;
              background-color: red;
              overflow: visible;
          ?
          }
          #b{
              width: 200px;
              height: 300px;
              background-color: blue;
          }

          效果如下:

          • overflow: hidden

          overflow 值為 hidden時,會將超出對象尺寸的內容進行裁剪,將不出現滾動條。

          HTML 代碼:

          <div id="a">
              <div id="b"></div>
          </div>

          CSS代碼:

          #a{
              width: 300px;
              height: 100px;
              background-color: red;
              overflow: hidden;
          ?
          }
          #b{
              width: 200px;
              height: 300px;
              background-color: blue;
          }

          效果如下:

          • overflow: scroll

          overflow 值為 scroll, 作用是將超出對象尺寸的內容進行裁剪,并以滾動條的方式顯示超出的內容 。

          HTML 代碼:

          <div id="a">
              <div id="b"></div>
          </div>

          CSS代碼:

          #a{
              width: 300px;
              height: 100px;
              background-color: red;
              overflow:  scroll;
          ?
          }
          #b{
              width: 200px;
              height: 300px;
              background-color: blue;
          }

          效果如下:

          • overflow: auto

          overflow 值為 auto時, 作用是在需要時剪切內容并添加滾動條,該值為body對象和textarea的默認值。

          HTML 代碼:

          <div id="a">
              <div id="b"></div>
          </div>

          CSS代碼:

          #a{
              width: 300px;
              height: 100px;
              background-color: red;
              overflow: auto;
          ?
          }
          #b{
              width: 200px;
              height: 300px;
              background-color: blue;
          }

          效果如下:

          總結:

          1. display 和 visibility 屬性都是用來設置或檢索對象是否及如何顯示。
          2. 使用diplay 隱藏對象時,在文檔流中不占空間.后續對象會占據隱藏對象位置。
          3. 使用 visibility 隱藏對象時,在文檔流中會保留隱藏對象所占用的空間。
          4. overflow 主要用來檢索或設置當對象的內容超過其指定高度及寬度時如何管理內容顯示。

          要是在野外迷了路可千萬別慌張,北極星會指引你方向。但事實上可不是每個都知道北極星的位置哦。

          在本次教程里我們使用html5+css3 來完成一個尋找北極星的動畫。

          那么首先我們需要知道尋找北極星的辦法:

          在星漢燦爛的北方太空,有一個勺子一樣的星座,由七顆較亮的星星組成我們正為北斗七星,也叫大熊座。它由天樞、天璇、天璣、天權、玉衡、開陽、搖光 七顆星組成。

          我們將七星相連組成一個勺子,然后將最后兩顆星相連,然后把延長線外延5倍的距離,就會發現有一顆,最亮的星星,它就是北極星。

          當然如果一個星座不好定位,別急還有我們的仙后座,他由五顆星組成一個W 型但這個字母隨著季節的變化開口方向也會變化,不過他中間那顆星的五倍延長線的位置,也同樣是指向北極星。好了,以后在野外再也不迷路了。

          <script src="https://lf6-cdn-tos.bytescm.com/obj/cdn-static-resource/tt_player/tt.player.js?v=20160723"></script>

          首先我們看下html:

          	<body>
          		<!--big-dipper -->
          		<div class="big-dipper">
          			<div class="one">
          				<span></span>
          			</div>
          			<div class="tow">
          				<span></span>
          			</div>
          			<div class="three">
          				<span></span>
          			</div>
          			<div class="four">
          				<span></span>
          			</div>
          			<div class="five">
          				<span></span>
          			</div>
          			<div class="six">
          				<span></span>
          			</div>
          			<div class="seven">
          				<span></span>
          			</div>
          		</div>
          		<!-- north-start -->
          		<div id="north-start"></div>
          		<!-- Cassiopeia -->
          		<div class="cassiopeia">
          			<div class="one">
          				<span></span>
          			</div>
          			<div class="tow">
          				<span></span>
          			</div>
          			<div class="three">
          				<span></span>
          				<span></span>
          			</div>
          			<div class="four">	
          				<span></span>
          			</div>
          			<div class="five">			
          			</div>
          		</div>	
          </body>
          

          big-dipper:是北斗星

          <div class="one">
          				<span></span>
          </div>
          

          同樣的方式建立了七顆星,里面的span標簽就是線條。通過transform動畫延遲寬度,實現連線效果。

          通過角度旋轉實現仙后座的轉動,同時連線也是通過這樣的方式調整角度。但要注意設置連線的旋轉點。

          transform: rotate(xxxdeg);
          transform-origin:0% 0%;
          

          限于篇幅最后附上北斗星的css樣式代碼:

          .big-dipper div{
          				position: absolute;
          				width:10px;
          				height:10px;
          				background: #fff;
          				border-radius: 50%;
          				box-shadow:0px 0px 5px 3px cornflowerblue; 
          			}
          			.big-dipper .one{
          				top:20px;		
          			}
          			.big-dipper .tow{
          				top:32px;
          				left:70px;
          			}
          			.big-dipper .three{
          				top:70px;
          				left:140px;
          			}
          			.big-dipper .four{
          				top:95px;
          				left:220px;
          			}
          			.big-dipper .five{
          				top:160px;
          				left:240px;
          			}
          			.big-dipper .six{
          				top:160px;
          				left:320px;
          			}
          			.big-dipper .seven{
          				top:90px;
          				left:350px;
          			}
          			.big-dipper span,.cassiopeia span{
          				display: block;
          				width:0px;		
          				height:1px;
          				position: absolute;
          				top:50%;
          				left:11px;
          				background: #fff;
          				box-shadow: 0 0 3px 1px #529DFF;
          			}	
          	
          	.big-dipper .one span {		
          		transform: rotate(10deg);
          		transform-origin:0% 0%;
          		animation: enttxt_effect .8s 1s linear forwards;
          	}
          	.big-dipper .tow span {		
          		transform: rotate(28deg);
          		transform-origin:0% 0%;
          		animation: enttxt_effect .8s 1.8s linear forwards;
          	}
          	.big-dipper .three span {		
          		transform: rotate(20deg);
          		transform-origin:0% 0%;
          		animation: enttxt_effect .8s 2.6s linear forwards;
          	}
          	.big-dipper .four span {
          		top:100%;
          		transform: rotate(75deg);
          		transform-origin:0% 0%;
          		animation: enttxt_effect .8s 3.4s linear forwards;
          	}
          	.big-dipper .five span {
          		transform: rotate(0deg);
          		transform-origin:0% 0%;
          		animation: enttxt_effect .8s 4.2s linear forwards;
          	}
          	.big-dipper .six span {
          		left:7px;
          		top:-1px;
          		transform: rotate(-66deg);
          		transform-origin:0% 0%;
          		animation: enttxt_effect .8s 5s linear forwards;
          	}
          	.big-dipper .seven span {
          		left:7px;
          		top:-1px;
          		width:1px;
          		background: none;
          		transform: rotate(-66deg);
          		transform-origin:0% 0%;
          		animation: enttxt_effect2 .8s 5.8s linear forwards;
          	}	
          	@keyframes enttxt_effect {
          		0% {
          			 width:0px;
          		}
          	
          		100% {
          			width:70px;
          		}
          	}
          	@keyframes enttxt_effect2 {
          		0% {
          			 width:0px;
          		}
          	
          		100% {
          			width:350px;
          		}
          	}
          

          感興趣的同學可以加關注,私信源碼


          主站蜘蛛池模板: 成人精品一区二区三区校园激情| 日本人真淫视频一区二区三区| 精品国产一区二区麻豆| 国产精品乱码一区二区三区 | 婷婷亚洲综合一区二区| 一区二区在线视频| 久久影院亚洲一区| 一区二区在线视频免费观看| 性色AV一区二区三区无码| 国产精品日本一区二区不卡视频| 日韩精品一区二区三区在线观看| 日韩精品中文字幕视频一区 | 国产在线一区二区在线视频| 国产一区二区三区免费在线观看| 亚洲一区二区三区在线| 91亚洲一区二区在线观看不卡| 亚洲国产综合无码一区| 国产一区二区在线看| 精品乱人伦一区二区三区| 成人区精品一区二区不卡| 精品福利一区二区三区| 中文字幕久久久久一区| 国产美女口爆吞精一区二区| 久久精品无码一区二区三区日韩| 一区二区三区午夜| 东京热无码一区二区三区av| 日本一区午夜艳熟免费| 日韩爆乳一区二区无码| 日韩精品视频一区二区三区| 亚洲一区二区三区免费视频| 精品国产AV一区二区三区| 亚洲变态另类一区二区三区| 精品久久久久久无码中文字幕一区| 日韩一区二区a片免费观看| 无码aⅴ精品一区二区三区| 日韩一区二区三区免费播放| 上原亚衣一区二区在线观看| 看电影来5566一区.二区| 91精品福利一区二区三区野战| 国产乱码一区二区三区| 动漫精品一区二区三区3d|