微信小程序开发初体验

微信小程序上线几天了,趁着周末补了一下JS,而后今天参照文档和教程写了个小demojavascript

文档地址       教程地址java

 

看文档就看了一点时间,由于之前没接触过JS框架,可是接触过PHP框架= = ,因此理解小程序的框架也不是很难。ios

微信小程序虽然是用了JS,可是没有了document对象,用起来就感受有点别扭,没JS那种DOM操做为所欲为的感受。。多是由于暂时还不是很熟悉。chrome

照着教程实现了一下,JS部分却是没什么太大的问题。数据库

主要是CSS部分,由于教程里面的CSS作的感受不是很好,因此就本身重写了。json

注意事项:小程序

重点:微信小程序

  • 在 iOS 上,小程序的 javascript 代码是运行在 JavaScriptCore 中微信

  • 在 Android 上,小程序的 javascript 代码是经过 X5 内核来解析app

  • 在 开发工具上, 小程序的 javascript 代码是运行在 nwjs(chrome内核) 中

这就是为何小程序同一段代码,在各类机器上运行效果不一样甚至会报错的缘由。

1.用的单位是rpx,这个文档里面有介绍,能够本身去查看。位置:框架->WXSS

2.屏幕的宽度是固定750rpx,= = 搞的我还傻乎乎的在想怎么获取屏幕的宽度再而后就行换算。。(不过这个rpx用起来仍是很爽的,起码再也不须要进行各类分辨率调整了)

3.用到了display: flex;

flex-direction: column;

这两个都是以前没有接触过的(原谅我渣渣)如今有必要好好了解下这个东西。

弹性布局

4.JS没有了DOM操做感受很不爽的样子。获取用户的输入都有点麻烦(详情见文档中的Q&A)

5.若是须要在组件中绑定数据进行传输,可使用将属性命名为data-XXX的方式,经过获取event.currentTarget便可获取XXX的值,若是须要跨页面传输,能够将此数据传输到AppService做为全局变量,而后另外一个页面从全局变量中获取

若是是两个页面之间进行传输,能够经过把XXX拼成URL传递过去,接收方能够这样接受:

 Page({
  onLoad: function(options) {
    console.log(options)
    this.setData({
      title: options.title,
      id:options.id
    })
  }
})

6.链接数据库的话就经过wx.request请求数据就行了。

7.添加页面必须在app.json中声明页面

8.有一个很神奇的地方,在你的app.json中,若是你声明了多个页面,而你其中有一个页面没有写page,那么后面的页面中的page就会补上来,不要问我是怎么知道的。。心痛。

好比,个人introduce中的js文件没有生成page对象,那么个人cases页面中的page就会跑到introduce里面去。。videos就会跑到cases里面去,而后video页面就会爆警告,Page[pages/videos/videos] not found. May be caused by: 1. Forgot to add page route in app.json. 2. Invoking Page() in async task.  那么其中的事件,数据什么的也天然而然的都没有了。。。

9.未完待续...

 有疑问的地方:

一、在swiper组件中,文档中写明了

swiper-item

仅可放置在<swiper/>组件中,宽高自动设置为100%。

可是为何我已经设置了swiper的组件宽度为750rpx,swiper-item下的image组件依然在右侧会有空白,即便把swiper-item的padding和margin设置为0也不行,只能把image设置为750rpx才解决。

二、弹性布局,在小程序中貌似有点小bug,在和地图组件配合使用时,使用flex-grow:1 让地图组件占满剩下的空间,在开发工具中没有任何问题,可是在ios真机环境下,进入页面会挤占其余组件的空间。而后又缩回去(也可能不会缩回去)

 新版本解决了这个bug

三、地图组件在真机上没法显示本身的位置,可是在开发者工具上能够显示出模拟的位置。 

 新版本解决了这个bug

因为小程序暂时不能跳转外链,因此没法进行详情查看。只能实现到这里了。

上代码:

 1 <swiper indicator-dots="true" autoplay="true" interval="1500" duration="1000" class="slide-image-box">
 2     <block wx:for="{{news}}">
 3         <swiper-item>
 4             <image src="{{item.thumbnail_pic_s02}}" class="slide-image"/>
 5         </swiper-item>    
 6     </block>
 7 </swiper>
 8 <view class="news-list">
 9 <block wx:for="{{news}}">
10         <image src="{{item.thumbnail_pic_s}}" class="news-image"/>
11         <view class="news-content" data-news-index="{{index}}" bindtap="viewInfo">
12             <text class="news-title">{{index+1}}.{{item.title}}</text>
13             <text class="news-text news-author">{{item.author_name}}</text>
14             <text class="news-text news-date">{{item.date}}</text>
15         </view>
16 </block>
17 </view>
视图层代码
 1 Page({
 2     data:{
 3         news:[]
 4     },
 5     onLoad:function(){
 6         var that=this;
 7         wx.request({
 8             url:'http://v.juhe.cn/toutiao/index',
 9             data:{
10                 type: 'topNews' ,
11                 key: '482e213ca7520ff1a8ccbb262c90320a'
12             },
13             header:{
14                 'Content-Type': 'application/json'
15             },
16             success:function(res){
17                 if(res.data.error_code == 0){
18                     that.setData({
19                         news:res.data.result.data
20                     })
21                 }else{
22                     console.log("获取失败");
23                 }
24             }
25         });
26     },
27     viewInfo:function(e){
28         console.log(e.currentTarget.dataset.newsIndex);
29     }
30 })
逻辑层代码
 1 .slide-image-box{
 2      width:750rpx;
 3      height: 422rpx;
 4 }
 5 .slide-image{
 6      width:750rpx;
 7      height: 422rpx;
 8 }
 9 .news-list{
10     display: flex;
11     flex-direction: column;
12     padding:20px 10px;
13 }
14 .news-image{
15     display:flex;
16     width:150rpx;
17     height:100rpx;
18 }
19 .news-content{
20     position:relative;
21     top:-100rpx;
22     left:180rpx;
23     width:530rpx;
24     height:120rpx;
25     margin-bottom:-60rpx;
26 }
27 .news-title{
28      font-weight:600;
29      font-size:30rpx;
30 }
31 .news-text{
32     font-size:24rpx;
33     position:absolute;
34     bottom:0rpx;
35     color:#aaa;
36 }
37 .news-author{
38     left:0rpx;
39 }
40 .news-date{
41     right:0rpx;
42 }
样式代码

同一套代码

iphone6下效果:

 

iphone5:

iphone4:

 

三星S5:

相关文章
相关标签/搜索