html代码转换小程序-word表格转换html代码
小程序是一种无需下载安装即可使用的应用程序。 它实现了“触手可及”的应用梦想。 用户可以通过扫描或搜索的方式打开应用。 也体现了“用完就走”的理念,用户无需关心是否安装了太多应用。 应用程序将无处不在,随时可用,但无需安装或卸载。 ——张小龙
微信小程序框架
微信小程序分为视图层和逻辑层。 视图层包括WXML(类似于HTML)、WXSS(类似于css),逻辑层包括javascript文件。 视图层通过事件通知逻辑层,逻辑层通过控制数据来更新视图。 此外,微信还提供了API、组件和配置文件,方便微信小程序的开发。
在开发微信小程序时,我们通过网络请求数据,对数据进行一定的处理后绑定到视图上。 由于组件的存在,简单的展示变得更加容易。 当涉及到网络请求、媒体、文件、缓存、位置、设备、支付、二维码等功能时,可以调用相应的API。 因此,微信小程序的开发足够简单,可以快速开发实施。
当然,利弊并存。 微信小程序虽然开发简单,但限制较多,缺乏灵活性。 在微信小程序中,更新视图只能修改数据,视图层只能通过事件将交互信息传递给逻辑层。 前端传统的Dom操作在微信小程序中是没有的,因为window和document在微信小程序中是不存在的,所以只要涉及操作Dom的代码就不能复用。 微信小程序WXML也提供了比HTML少很多的标签,但是有通用的标签,WXSS支持的样式比CSS少。 如果要将H5页面移植到微信小程序,需要修改的地方还有很多:
WXML标签与HTML标签不一致,需要重写;
微信小程序不具备DOM交互能力,涉及DOM操作的代码需要在小程序中单独设计;
网络请求、媒体、文件、缓存、接口等相关内容需要使用小程序提供的API来实现,API的使用比较简单;
与以上内容无关的JS逻辑代码可以复用;
css代码复用率高,除了一些复杂的CSS3样式,基本都可以移植。 小程序额外提供了flex和rpx的实现,更方便制作响应式页面。
综上所述,微信小程序开发简单,码农可以快速上手,开发出可用的小程序。 但是,微信小程序也有很多限制。 它们不能操作 DOM,并且支持更少的 HTML 标签和 CSS 样式。 做一些很酷的动画或者复杂的功能是比较困难的。 H5页面移植到微信小程序还有很多地方需要修改,主要是WXML标签,JS和HTML交互,小程序提供的API函数。
微信小程序开发姿势
想要开始开发微信小程序,正确的步骤是什么? 我也不知道。 . . 以下是我个人推荐的步骤:
先了解微信小程序为什么诞生,从产品的角度思考微信小程序的优缺点(对于程序员思考小程序为什么要这样设计,为什么会有各种限制非常有帮助in it), 推荐《一读这篇文章,了解什么是微信小程序(申请号)?》、《你们的产品适不适合做微信小程序?》;
对小程序开发的框架、设计理念、优缺点有整体的了解;
浏览微信小程序官网;
仔细阅读小程序官网开发部分(,下载微信小程序开发者工具,体验官网提供的demo;
开始开发微信小程序。
模块化 JavaScript 模块化
在微信小程序中,JS文件中声明的变量和函数只在该文件中有效; 不同的文件可以声明同名的变量和函数,互不影响。 如果需要获取全局应用实例,可以在App()中设置。
// app.js
App({
globalData: 1
})
// a.js
// The localValue can only be used in file a.js.
var localValue = 'a'
// Get the app instance.
var app = getApp()
// Get the global data and change it.
app.globalData++
另外,可以通过require()引入其他JS文件,通过文件中的module.exports暴露模块接口。
// common.js
function sayHello(name) {
console.log(`Hello ${name} !`)
}
module.exports.sayHello = sayHello
// index.js
var common = require('common.js')
Page({
helloMINA: function() {
common.sayHello('MINA')
}
})
WXML 模块化
WXML可以通过模板组织标签,使得WXML拆分合理、清晰、易读。 使用template标签定义模板,使用name属性指定模板名称; 使用 import 标签导入模板,使用 is 属性指定要使用的模板名称html代码转换小程序,以及传入属性的数据。
// template/msgItem.wxml
{{index}}: {{msg}}
Time: {{time}}
// index.wxml
WXSS 模块化
使用@import 语句导入外部样式表。 @import 后面是要导入的外部样式表的相对路径。 利用 ; 来表示语句的结束。
/** common.wxss **/
.small-p {
padding:5px;
}
/** app.wxss **/
@import "common.wxss";
.middle-p {
padding:15px;
}
视图层与逻辑层交互
视图层包括类似于HTML的WXML,基本相当于CSS的WXSS,逻辑层包括ES,去掉了window、document等对象和方法,提供了一些API。 视图层通过事件通知逻辑层交互,逻辑层通过修改数据来更新视图。
简单交互示例
{{userName}}, Click me!
Page({
data: {
userName: 'xxx'
},
tapName: function(e){
wx.showToast({
title: 'hi,' + this.data.userName + 'I`m ' + e.currentTarget.dataset.name,
icon: 'success',
duration: 2000
})
}
})
WXML中的动态数据来自于对应Page的数据。 数据绑定使用双花括号来包装变量。 当数据改变时(this.setData()),视图将被更新。 update的方式和virtual dom类似。 事件的定义需要在tag属性中指定事件处理函数的名称,事件处理函数定义在Page({})中。 如果事件处理函数需要传递参数,则必须定义在标签的data-中,但一般情况下,我们不需要传递参数,因为大部分数据都可以通过this.data获取。 在事件处理函数中。
修改数据
在小程序中,使用this.setData()修改数据,然后更新视图。 但是当data中的二级数据要修改时,不会进行merge修改。 如:
Page({
data: {
userInfo: {
name: 'payton',
sex: 1
},
tip: 'hello, world'
},
onLoad: function(){
this.setData({tip: 'hello, world!'}) // 进行合并修改,userInfo不变
this.setData({userInfo: {name: 'peyton'}}) // 二级数据,整体修改。userInfo中sex消失,userInfo为{name: 'peyton'}
}
})
很多时候,我们在修改数据的时候,只想修改我们传入的参数,不会改变原来的参数。 比如我们只想修改上面的名字,而性别保持不变。 因此,我们可以采取以下方法:
this.setData({
userInfo: {
name: 'peyton',
sex: this.data.userInfo.sex
}
})
但是这种方法很麻烦,容易忘记一些内容,或者在修改属性名的时候容易遗漏。 因此,我们设计了一个函数来实现对这个深层次数据的合并修改。 使用以下方法进行合并。
// util.js
function mergeObject(to, source) {
var from;
var symbols;
for(var s = 1; s < arguments.length; s++) {
from = Object(arguments[s]);
for(var key in from) {
if(hasOwnProperty.call(from, key)) {
to[key] = from[key];
}
}
}
return to;
};
module.exports.mergeObject = mergeObject;
var util = require('../util.js');
Page({
...
onLoad: function(){
this.setData({tip: 'hello, world!'}) //进行合并修改,userInfo不变
this.setData({
userInfo: util.mergeObject(this.data.userInfo, {
name: 'peyton'
})
}) // 合并修改,sex不会消失。userInfo为{name:'peyton',sex:1}
}
})
插入 HTML
在开发H5页面时,我们通常会使用innerHTML来修改标签中的HTML。 在小程序中,我们无法手动修改 DOM。 例如:后台投放一小段内容。 这段内容应该显示在页面上,但是它包含图片,而且图片的数量是可变的。 我们没有办法通过js构造HTML片段插入到视图中。 在开发花花直播时,有时用户发送的内容会包含表情,也就是图片。 这时候小程序的数据就不能用来解析标签了,这个功能实现起来很麻烦。 我的实现如下:
// msg.wxml
{{content.text}}
// 后台传递的content: 主播好漂亮/:149/ (注:/:149/表示微笑表情)
if (...) {
return {
type: 'text',
text: text
}
} else if (..){
return {
type: 'image',
src: src
}
}
即把后台传入的内容转成数组,需要标明类型,然后根据条件渲染,分别渲染成文字和图片。 由于我这里的需求只需要关注显示文字和表情,所以这个方法就OK了。 但是如果后台传输的是文章类型的内容(包括图片、标题等),需要转成多种格式,自己写会很麻烦。 这时候推荐使用wxParse(,它支持HTML和markdown的解析,其实现思路其实和上面的方法类似。如果使用wxParsehtml代码转换小程序,可以直接将H5版本构建的html片段传入wxParse ,wxParse会解析,最后转成小程序版本 不过有同事用过,但是反馈说如果页面图片很多,用wxParse会比较卡顿,没试过我自己,这里就不多说了。
Applet 组件和 API
小程序本身提供了很多组件和API,可以方便开发使用,大大加快开发进程。 目前部分组件和API还存在一些小坑,还在动态完善中。 这部分要注意,官网介绍的很全面,这里只简单介绍一下。
配置
在小程序中,可以通过app.json对小程序进行全局配置,在各个页面进行相关配置(只能配置页面中的配置项,比全局配置少)。 在全局配置中,可以配置的内容是:
pages,设置页面路径,第一个路径为默认初始页面,所有页面路径都需要配置;
window,设置默认页面的窗口表现,如状态栏、导航栏、标题、窗口背景色等(可在页面配置,覆盖全局配置);
tabBar,设置tab的表现,可以设置图片,文字等;
networkTimeout,网络超时;
debug,设置是否开启调试模式。
组件
与H5相比,WXML提供的组件种类不算太多,但常用的都有,开发小程序不成问题。 它的组件中提供了一些方便的属性,还是很方便的,但是属性和H5相比还是不够全面。
视图容器:view(类似div)、scroll-view(类似带滚动条的div)、swiper(滑块视图容器);
表单组件:按钮、复选框、表单、输入框、标签等;
基本内容:icon(小程序提供的icon)、text(行内文字)、progress(进度条);
媒体组件:audio、image(background-image的形式有很多坑,最好用image)、video;
地图、画布、导航、客户服务会话等。
蜜蜂
微信小程序提供的API还是挺多的,用起来还不错。