【技术教程]】【微码开发】微码开发入门 - 基础模板开发

举报
Welink小达人 发表于 2020/04/13 14:50:53 2020/04/13
【摘要】 微码开发入门 - 基础模板开发

在打开微码基础模板且安装完依赖后,资源管理器的 “WECODE TOOLS”会出现菜单,点击“本地调试”,将会开始编译运行项目,最后将在默认浏览器打开首页 ( src/html/index.html )。



到这里,项目已经跑起来了,可以开始加入我们想要的功能了。
我们来看一下index.html:

123456789101112131415161718192021222324<html>    <head>        <meta charset="utf-8" />        <title>首页</title>        <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no" />        <meta name="description" content="" />        <!-- JSAPI相关样式  -->        <link rel="stylesheet" href="../../../../common/css/hwh5.css">    </head>    <body>        <div class="page">            <div class="page__bd">                <h1 class="hello-world">Hello World!</h1>            </div>            <a class="page-link" href="../desc/index.html" >使用说明</a>        </div>        <script type="text/javascript" src="../js/es6.polyfill.js"></script>        <!-- 控制台脚本,调试阶段可打开  -->        <%= htmlWebpackPlugin.options.vconsole === true ? '<script type="text/javascript" src="../../../../common/js/vconsole.js"></script>' : '' %>        <script src="../jquery.min.js"></script>        <!-- JSAPI相关脚本 -->        <script src="../../../../common/js/hwh5.js"></script>        <script src="../js/hwh5.compatible.js"></script>    </body></html>

body内部引入了一些脚本:

vconsole.js - 类似于开发者工具,方便在手机端进行控制台调试的。
hwh5.js - 提供一些原生能力的api
es6.polyfill.js - 允许开发者编写符合es6最新规范的代码,在不支持es6规范的浏览器中将自动转换为es5兼容模式

将同目录下的index.js引入到index.html中,css文件是在index.js中被载入的。

123456    <script src="../jquery.min.js"></script>    <script src="./index.js"></script>    <!-- JSAPI相关脚本 -->    <script src="../../../../common/js/hwh5.js"></script>    <script src="../js/hwh5.compatible.js"></script>  </body>12import '../app';import './index.css';

看到这里也许有些人会有迷惑,为什么css文件要在js中以import的方式载入呢。这是因为webpack的css loader在编译时需要在入口文件中寻找样式文件来进行编译,最终以内嵌的方式写到html中的。什么意思?也就是说,你改完index.css保存,你所修改的内容会被同步写入到页面中的 style 标签中。

下面我们来实现一个简易版的新闻功能,它有一个列表页、详情页,在详情页会有一个分享功能,用于分享到好友或者群

首先来设计主页,也就是列表页,就以src/html/index.html作为主页吧。
先加入一个导航栏,这里使用官方提供的UI组件,在head中引入的 hwh5.css 里面包含了官方提供的UI组件的样式,直接引入dom结构就好了( https://open.welink.huaweicloud.com/wecode/docs/dev/ui_cloud/navbar/navbar.html?v=1547690385 ) 。引入导航栏dom后是这样的:

1234567891011121314151617<div class="page">  <div class="page__bd">    <div class="weui-tab">      <div class="weui-navbar">        <div class="weui-navbar__item weui-bar__item_on">            <span class="weui-navbar__item_title">热点</span>        </div>        <div class="weui-navbar__item">            <span class="weui-navbar__item_title">推荐</span>        </div>        <div class="weui-navbar__item">            <span class="weui-navbar__item_title">原创</span>        </div>      </div>    </div>  </div></div>

保存后在浏览器看到效果如下:



接下来设计一个列表,这里还是使用官方UI组件中的样式,如果你需要个性化列表样式,请自行设计,打开(https://open.welink.huaweicloud.com/wecode/docs/dev/ui_cloud/navbar/navbar.html?v=1547690385) 引入UI组件的列表dom结构,因为有三个分类,所以列表也需要有三个容器包裹,这样等下好做导航切换效果:

1234567891011121314151617181920212223242526272829<div class="news-list">  <div class="weui-cells active">    <div class="weui-listview-box">        <div class="weui-listview-box__bg">            <div class="weui-listview-view"><img src="../img/news1.jpg"/></div>            <div class="weui-listview-title">亚美尼亚 被神灵和奇迹环绕的国度            </div>            <div class="weui-listview-footer"><span>07-19 09:05</span></div>        </div>    </div>  </div>  <div class="weui-cells">    <div class="weui-listview-box">        <div class="weui-listview-box__bg">            <div class="weui-listview-view"><img src="../img/news2.png"/></div>            <div class="weui-listview-title">到手的金牌飞了!英跳水名将最后一跳领先30分 却横拍入水抱女友痛哭            </div>            <div class="weui-listview-footer"><span>07-18 21:31</span></div>        </div>    </div>  </div>  <div class="weui-cells">    <div class="weui-listview-box">        <div class="weui-listview-box__bg">            <div class="weui-listview-view"><img src="../img/news3.jpg"/></div>            <div class="weui-listview-title">史陶芬伯格刺杀希特勒,这个行动成功概率有多少?            </div>            <div class="weui-listview-footer"><span>07-19 08:36</span></div>        </div>    </div>  </div></div>

这里需要用样式控制显示和隐藏:

12.news-list .weui-cells{ display: none; }.news-list .weui-cells.active{ display: block; }

保存看效果:



好啦,一个新闻列表的dom结构大致完成了,当然这里的数据是写死的,具体开发中需要使用后端接口提供的数据,关于如何使用网络请求,请参考官方api:在微码中发送网络请求(https://open.welink.huaweicloud.com/wecode/docs/dev/jsapi/fetch/fetchinternet_cloud.html?v=1547690385)

接下来实现导航栏的切换效果,在src/html中新建一个js文件,就命名为main.js吧,然后在index.js中引入:

打开main.js,我们用jquery的选择器来操作:

12345$('.weui-navbar .weui-navbar__item').on('click', function () {  var index = $(this).index();  $(this).addClass('weui-bar__item_on').siblings().removeClass('weui-bar__item_on');  $(`.news-list .weui-cells:eq(${index})`).addClass('active').siblings().removeClass('active');});

保存就可以看到导航栏可以切换了,且下面的列表也会跟随切换。




好了,接下来需要设计一个详情页。详情页就是一篇文章,实际开发中,整个文章dom结构都是从接口得到的,这里使用静态内容做一个示范。
将src下的desc目录更名为news,作为详情页,且需要在app.json中同步更改:
src/app.json:

123456{  "pages": [    "html/index",    "news/index"  ]}

src/news/index.html:

12345678910111213141516171819202122<div class="page">  <div class="page__bd">    <article style="overflow: hidden; max-height: none;">      <div class="article-content">          <div class="head">          <h1 class="title">亚美尼亚 被神灵和奇迹环绕的国度</h1>          <div class="info">              <span class="time js-time">2019-07-19 09:05</span>          </div>          </div>          <div class="content">            <p>当飞机在机场上空盘旋,等待降落到跑道上时,你可趁机望望窗外的风景。在你面前,有如明信片上的照片一样美丽的就是亚拉拉特山。它是世界上最著名的山之一,毋庸置疑也是宗教地位最高的山之一。虽然三大亚伯拉罕宗教(犹太教、基督教与伊斯兰教)的教徒在许多事情上存在分歧,但他们都相信《旧约·创世纪》中的描述,即当上帝让世界发洪水的时候,诺亚方舟最后停泊的地方就在亚拉拉特山。</p>            <div class="photo"><img alt="" src="../img/news1.jpg" /></div>            <p>虽然有许多人不相信诺亚方舟的故事,但在高加索的这一部分地区,确有一些地理证据表明这里曾发过大洪水。如果真的是这样,虽然洪水无疑为当地的民众带来了灾难(并在此之后,被他们的民间传说收录进来,口耳相传),但洪水影响的也可能仅仅是一小部分地区。一些地理学家与考古学家曾暗示洪水可能是海啸造成的,而在古代人看来,那就是上帝在发怒。亚拉拉特山现在已经不属于亚美尼亚了,它是国境线另一侧的土耳其的领土,对这一点亚美尼亚人格外敏感,但是这座山依旧是亚美尼亚人的民族认同的一个重要的部分。亚美尼亚民族自称是诺亚最小的儿子雅弗的后代;亚拉拉特山出现在国徽与银行发行的纸币上;在亚美尼亚的古代传说中,亚拉拉特山是众神之家,这点非常像古希腊的神都居住在奥林匹斯山一样。亚拉拉特山主宰着埃里温的天际线,亚美尼亚人称,这是一个永恒的提示,即人类在地球上生活是因了上帝的恩泽。</p>          </div>      </div>    </article>    <div id="shareBtn" class="share-btn">      +        </div>  </div></div>

看下效果:



按照列表页的样式引用方法,我们在news/index.css中加入一些样式让页面看起来协调一些:

12345article{ padding: 10px; }article .info{ font-size: 0.28rem; font-weight: normal; margin: 0 0 0.12rem 0; color: #888888; }article p{ text-indent: 2em; margin: 0.6rem 0; }article img{ width: 100%;}.share-btn{ display: inline-block; background: #ff6f6f; width: 2rem; height: 2rem; text-align: center; color: #fff; font-size: 2rem; line-height: 2rem; padding: 5px; border-radius: 50%; position: fixed; right: 10px; bottom: 50px; }


同时,在src/html/index.html中给列表加上链接,指向详情页:

1234567<a href="../news/index.html">  <div class="weui-listview-box__bg">      <div class="weui-listview-view"><img src="../img/news1.jpg"/></div>      <div class="weui-listview-title">亚美尼亚 被神灵和奇迹环绕的国度      </div>      <div class="weui-listview-footer"><span>07-19 09:05</span></div>  </div></a>

注意到这个红色的分享按钮了吗?接下来将调用JSAPI做一个分享功能,最终分享到群或者聊天界面显示的是一张卡片。使用的是 HWH5.share 这个方法,来看一下参数调用:

参数类型是否必填说明typeString是类型titleString是标题h5UriString是h5页面的UrifromString是分享来源,可以填微码的应用名称descString否描述,title下面会紧接一段描述文本pcUriString否PC端点击打开的链接。isPCDisplay为1时,该参数为必传参数isPCDisplayNumber否是否在PC显示分享信息。1:显示,0:不显示iconURLString否分享图标

这里面最重要的一个参数 h5Uri 就是微码应用在CloudLink中url链接地址,在根目录下的 plugin.json 中可以看到:

123456789101112{  "indexURL": "h5://20190709172642809/html/index.html",  "appId": "20190709172642809",  "minSdkVersionName": "1.2.8",  "versionName": "1.0.0",  "permissions": [    "outerNet",    "contact",    "file",    "media"  ]}

其中 indexURL 就是我们要用到的参数 h5Uri,好了,开始写分享这一部分的代码。
同样的,将jquery.min.js引入详情页中:

123456<script type="text/javascript" src="../js/es6.polyfill.js"></script><script src="../js/jquery.min.js"></script><!-- JSAPI相关脚本 --><script src="../../../../common/js/hwh5.js"></script><script src="../js/hwh5.compatible.js"></script><script src="./index.js"></script>

然后在同目录下的index.js中实现功能:

1234567891011121314151617import '../app';import './index.css';$('#shareBtn').on('click', function () {  var _shareParams = {    title: '亚美尼亚 被神灵和奇迹环绕的国度',    desc: '亚美尼亚 被神灵和奇迹环绕的国度',    h5Uri: 'h5://20190709172642809/html/index.html',    iconURL: 'https://open.welink.huaweicloud.com/wecode/image/icon/20190709/7ab9c09c-81c5-45d9-97cf-9b52cd01e676.png',    from: 'simpleDemo'  };   HWH5.share({    type: 'IM',    data: _shareParams  }).catch(function (error) {    console.log('分享发生异常', error);  });});

title 填上创建应用时填写的应用名称,针对于当前页面,我填上了新闻的标题,具体情况具体对待
desc 写上简单的描述,针对于当前页面,我填上了新闻的简介
h5Uri 填上plugin.json中的 indexURL 字段值
iconURL 分享卡片中的缩略图,在应用详情中可以找到,也可以使用当前分享页面的具体图片,更为贴切
from 填上应用英文名
父级参数 type 就填写 ‘IM’。

到这里一个简单的新闻带分享功能就完成了,是不是很简单?是的,确实很简单, 除了一些环境问题需要注意,然后就是借助JSAPI实现一些原生能力,其他的跟写普通页面一样的。
下一章将记录真机调试的过程。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。