微信小程序第四章总结

目录

4.1 组件的定义及属性

4.2 容器视图组件

4.2.1 view 

 4.2.2 scroll-view

4.2.3 swiper

4.3 基础内容组件

4.3.1 icon

4.3.2 text 

 4.3.3 progress

4.4 表单组件 

4.4.1 button 

4.4.2 radio

4.4.3 checkbox

4.4.4 switch 

4.4.5  slider

 4.4.6 picker

        1. 普通选择器

2.多列选择器

3. 时间选择器、日期选择器

 4. 省市选择器

4.4.7 picker-view

4.4.8 input

4.4.9 textarea 

4.4.10 label

4.4.11 form

4.5 多媒体组件 

4.5.1 image 

4.5.2 audio

4.5.3 video 

4.5.4 camera 

 4.6 其他组件


4.1 组件的定义及属性

        组件是页面视图层(WXML)的基本组成单元,组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布、开放能力等8类基础组件。

        每一个组件都由一对标签组成又开始标签和结束标签,内容放置在开始标签和结束标签之间,其内容也可以是组件。组建的语法格式如下:

<标签名 属性名="属性值">内容...</标签名>

4.2 容器视图组件

        容器视图组件是能容纳其他组件的组件,是构建小程序页面布局的基础组件,主要包括view、scroll-view和swiper组件。

4.2.1 view

        view组件是块级组件,没有特殊功能,主要用于布局显示。view组件的特有属性如表所示。

         示例代码如下:

<view style="text-align: center;">默认flex布局</view>
<view style="display: flex;">
  <view style="border: 1px solid #f00;flex-grow: 1;">1</view>
  <view style="border: 1px solid #f00;flex-grow: 1;">2</view>
  <view style="border: 1px solid #f00;flex-grow: 1;">3</view>
</view>
<view style="text-align: center;">上下混合布局</view>
  <view style="display:flex;flex-direction: column;">
  <view style="border: 1px solid #f00;">1</view>
    <view style="display:flex;">
      <view style="border: 1px solid #f00;flex-grow: 1;">2</view>
      <view style="border: 1px solid #f00;flex-grow: 1;">3</view>
    </view>
</view>
  <view style="text-align: center;">左右混合布局</view>
  <view style="display: flex;">
    <view style="border: 1px solid #f00;flex-grow: 1;">1</view>
    <view style="display:flex;flex-direction: column;flex-grow: 1;">
        <view style="border: 1px solid #f00;flex-grow: 1;">2</view>
        <view style="border: 1px solid #f00;flex-grow: 2;">3</view>
      </view>
    </view>

        运行结果如下: 

 4.2.2 scroll-view

        通过设置scroll-view组件的相关属性可以实现滚动视图的功能,其属性如表所示。

         代码如下:

//wxml
<view class="container" style="padding: 0rpx;">
  <scroll-view scroll-top="{{scrollTop}}" scroll-y="true" 
  style="height: {{scrollHeight}} px;" class="list" bind-scrolltolower="bindDownLoad"
  bindscroll="topLoad" bindscroll="scroll">
    <view class="item" wx:for="{{list}}">
    <image class="img" src="{{item.pic_url}}"></image>
      <view class="text">
        <text class="title">{{item.name}}</text>
        <text class="description">{{item.short_description}}</text>
      </view>
    </view>
  </scroll-view>
  <view class="body-view">
  <loading hidden="{{hidden}}" binchange="loadingChange">
  加载中...
  </loading>
  </view>
</view>
//js
var url="http://www.imooc.com/course/ajxlist";
var page = 0;
var page_size = 5;
var sort = "last";
var is_easy = 0;
var lang_id = 0;
var pos_id = 0;
var unlearn = 0;
//请求数据
var loadMore = function(that){
    that.setData({
      hidden:false
    });
wx.request({
  url: url,
data:{
  page:page,
  page_size:page_size,
  sort:sort,
  is_easy:is_easy,
  lang_id:lang_id,
  pos_id:pos_id,
  unlearn:unlearn
},
success:function(res){
  var list = that.data.list;
  for(var i = 0;i < res.data.list.length;i++){
    list.push(res.data.list[i]);
  }
that.setData({
  list:list
});
page++;
that.setData({
  hidden:true
});
}
});
}
Page({
  data:{
    hidden:true,
    list:[],
    scrollTop:0,
    scrollHeight:0
  },
onLoad:function(){
  var that = this;
  wx.getSystemInfo({
    success:function(res){
      that.setData({
        scrollHeight:res.windowHeight
      });
    }
  });
loadMore(that);
},
bindDownLoad:function(){
  var that = this;
  loadMore(that);
  console.log("lower");
},
scroll:function(event){
  this.setData({
    scrollTop:event.detail.scrollTop
  });
},
topLoad:function(event){
page = 0;
this.setData({
  list:[],
  scrollTop:0
});
    loadMore(this);
    console.log("lower");
  }
})
//wxss
.userinfo{
  display: flex;
  flex-direction: column;
  align-items: center;
}
.userinfo-avatar{
  width: 128rpx;
  height: 128rpx;
  margin: 20rpx;
  border-radius: 50%;
}
.userinfo-nickname{
  color: #aaa;
}
.usermotto{
  margin-top: 200px;
}
scroll-view{
  width: 100%;
}
.item{
  width: 90%;
  height: 300rpx;
  margin: 20rpx auto;
  background: brown;
  overflow: hidden;
}
.item.img{
  width: 430rpx;
  margin-right: 20rpx;
  float: left;
}
.title{
  font-size: 30rpx;
  display: block;
  margin: 30rpx auto;
}
.description{
  font-size: 26rpx;
  line-height: 15rpx;
}

4.2.3 swiper

        swiper组件可以实现轮播图、图片预览、滑动页面等效果。属性如表所示:

        代码及运行结果如图所示:

4.3 基础内容组件

        基础内容组件包括icon、text和progress,主要用于在视图页面中展示图标、文本和进度条等信息。

4.3.1 icon

        icon组件即图标组件,通常用于表示一种状态,如success、info、warn、waiting、cancel等。其属性如表所示:

        代码如下:

//wxml
</view>
<view>icon大小:
  <block wx:for="{{iconSize}}">
    <icon type="success" size="{{item}}"/>{{item}}
  </block>
</view>
<view>icon颜色:
  <block wx:for="{{iconColor}}">
    <icon type="success" size="30" color="{{item}}"/>{{item}}
  </block>
</view>
//js
Page({
  data:{
    iconType:["success","success_no_circle","info","warn","waiting","cancel","download","search","clear"],
    iconSize:[10,20,30,40],
    iconColor:['#f00','#0f0','#00f']
  }
})

        运行结果如下:

4.3.2 text 

        text组件用于展示内容,类似HTML中的<span>,text组件中的内容支持长按选中,支持转义字符“\”,属于行内元素。属性如表所示:

        代码如下:

wxml:

<block wx:for="{{x}}" wx:for-item="x">
    <view class="aa">
      <block wx:for="{{25-x}}" wx:for-item="x">
        <text decode="{{true}}" space="{{true}}" >&nbsp;</text>
      </block>
      <block wx:for="{{y}}" wx:for-item="y">
        <block wx:if="{{y <= 2*x-1}}">
          <text>*</text>
        </block>
      </block>
    </view>
  </block>

  <block wx:for="{{x}}" wx:for-item="x">
    <view class="aa">
      <block wx:for="{{19 +x}}" wx:for-item="x">
        <text decode="{{true}}" space="{{true}}" >&nbsp;</text>
      </block>
      <block wx:for="{{y}}" wx:for-item="y">
        <block wx:if="{{y <= 11 - 2*x}}">
          <text>*</text>
        </block>
      </block>
    </view>
  </block>

js:

Page({
  data:{
    x:[1,2,3,4,5],
    y:[1,2,3,4,5,6,7,8,9]
  }
})
        运行结果如下:

 4.3.3 progress

        progress组件用于显示进度状态,如资源加载、用户资料完成度、媒体播放进度等。

progress组件属于块级元素,其属性如表所示:

        

        代码如下:

//wxml
<view>显示百分比</view>
<progress percent='80' show-info='80'></progress>
<view>改变宽度</view>
<progress percent='50' stroke-width='2'></progress>
<view>自动显示进度条</view>
<progress percent='80' active></progress>

        运行结果如下: 

4.4 表单组件 

        表单组件的主要功能是收集用户信息,并将这些信息传递给后台服务器,实现小程序与用户之间的沟通。表单组件不仅可以放置在<form/>标签中使用,还可以作为单独组件和其他组件混合使用。

4.4.1 button

        button组件用来实现用户和应用之间的交互,同时按钮的颜色起引导作用。一般来说,在一个程序中一个按钮至少有三种状态:默认点击(default)、建议点击(primary)、谨慎点击(warn)。在构建项目时,应在合适的场景使用合适的按钮,当<button>被<form/>包裹时,可以通过设置form-type属性来触发表单对应的事件。button组件的属性如表所示:

代码如下:

//wxml
<button type="default">type:default</button>
<button type="primary">type:primary</button>
<button type="warn">type:warn</button>
<button type="default" bindtap='buttonSize' size="{{size}}">改变size</button>
<button type="default" bindtap='buttonPlain' plain="{{plain}}">改变plain</button>
<button type="default" bindtap='buttonLoading' loading="{{loading}}">改变loading显示</button>
//js
Page({
 data:{
   size:'default',
   plain:'false',
   loading:'false'
 },
 buttonSize:function(){
   if(this.data.size == "default")
    this.setData({size:'mini'})
    else
      this.setData({size:'default'})
 },
 buttonPlain:function() {
   this.setData({plain:!this.data.plain})
 },
 buttonLoading:function() {
   this.setData({loading:!this.data.loading})
 }
})

        运行结果如下: 

4.4.2 radio

        单选框用来从一组选项中选取一个选项。在小程序中,单选框由<radio-group>和<radio/ >两个组件组合而成,一个包含多个<radio/>的<radio-group/>表示一组单选项,在同一组单选项中<radio/>是互斥的,当一个按钮被选中后,之前选中的按钮就变为非选。它们的属性如表所示:

        代码如下:
//wxml
<view>选择您喜爱的城市:</view>
<radio-group bindchange="citychange">
  <radio value="西安">西安</radio>
  <radio value="北京">北京</radio>
  <radio value="上海">上海</radio>
  <radio value="广州">广州</radio>
  <radio value="深圳">深圳</radio>
</radio-group>
<view>你的选择:{{city}}</view>
<view>选择您喜爱的计算机语言:</view>
<radio-group class="radio-group" bindchange="radiochange">
    <label class="radio" wx:for="{{radios}}">
      <radio value="{{item.value}}" checked="{{item.checked}}"/>
{{item.name}}
    </label>
</radio-group>
<view>你的选择:{{lang}}</view>
//js
Page({
  data:{
    radios:[
      {name:'java',value:'JAVA'},
      {name:'python',value:'Python',checked:'true'},
      {name:'php',value:'PHP'},
      {name:'swif',value:'Swif'},
    ],
    city:"",
    lang:""
  },
  citychange:function (e) {
    this.setData({city:e.detail.value});
  },
  radiochange:function (event) {
    this.setData({lang:event.detail.value});
    console.log(event.detail.value)
  }
})

        运行结果如图:

4.4.3 checkbox

        复选框用于从一组选项中选取多个选项,小程序中复选框由<checkbox-group/>和<checkbox/>两个组件组合而成。一个<checkbox-group/>表示一组选项中选中多个选项。它们的属性如表所示:

        代码如下:
//wxml
<view>选择您想去的城市:</view>
<checkbox-group bindchange="cityChange">
<label wx:for="{{citys}}">
<checkbox value="{{item.value}}" checked='{{item.checked}}'>
  {{item.value}}
</checkbox>
</label>
</checkbox-group>
<view>您的选择是:{{city}}</view>
//js
Page({
  city:"",
  data:{
    citys:[
      {name:'km',value:'昆明'},
      {name:'sy',value:'三亚'},
      {name:'zh',value:'珠海',checked:'true'},
      {name:'dl',value:'大连'}]
  },
  cityChange:function (e) {
    console.log(e.detail.value);
    var city = e.detail.value;
    this.setData({city:city})
  }
})
        运行结果如下:

4.4.4 switch 

        switch组件的作用类似开关选择器,其属性如表所示:

        代码如下:
//wxml
<view>
  <switch bindchange="sw1">{{var1}}</switch>
</view>
<view>
  <switch bindchange="sw2">{{var2}}</switch>
</view>
<view>
  <switch type="checkbox" bindchange="sw3">{{var3}}</switch>
</view>
//js
Page({
  data:{
    var1:'关',
    var2:'开',
    var3:'未选'
  },
  sw1:function (e) {
    this.setData({var1:e.detail.value?'开':'关'})
  },
  sw2:function (e) {
    this.setData({var2:e.detail.value?'开':'关'})
  },
  sw3:function (e) {
    this.setData({var3:e.detail.value?'已选':'未选'})
  }
})
        运行结果如下:

4.4.5  slider

         slider组件为滑动选择器,可以通过滑动来设置相应的值,其属性如表所示:

        代码如下:
//wxml
<view>默认min=0 max=100 step=1</view>
<slider></slider>

<view>显示当前值</view>
<slider show-value></slider>
<view>设置min=20 max=200 step=10</view>
<slider min='0' max='200' step='10' show-value></slider>

<view>背景条红色,已选定颜色绿色</view>
<slider color="#f00" selected-color='0f0'></slider>

<view>滑动改变icon的大小</view>
<slider show-value bindchange='sliderchange'></slider>
<icon type="success" size='{{size}}'></icon>
//js
Page({
  data:{
    size:'20'
  },
  sliderchange:function (e) {
    this.setData({size:e.detail.value})
  }
})
        运行结果如下:

 4.4.6 picker

        picker组件为滚动选择器,当用户点击picker组件时,系统从底部弹出选择器供用户选择。picker组件目前支持5种选择器,分别是:selector、multiSelector、time、date、region。

        1. 普通选择器

        普通选择器的属性如表所示:

        代码如下:
//wxml
<view>----range为数组----</view>
  <picker range="{{array}}" value="{{index1}}" bindchange='arrayChange'>
    当前选择:{{array[index1]}}
  </picker>


  <view>----range为数组----</view>
  <picker
  bindchange="objArrayChange" value="{{index2}}" range-key="name" range="{{objArray}}">
    当前选择:{{objArray[index2].name}}
  </picker>
//js
Page({
  data:{
    array:['Java','Python','C','C#'],
    objArray:[
      {id:0,name:'Java'},
      {id:1,name:'Python'},
      {id:2,name:'C'},
      {id:3,name:'C#'}
    ],
    index1:0,
    index2:0
  },
  arrayChange:function (e) {
    console.log('picker值变为',e.detail.value)
    var index = 0;
    this.setData({
      index1:e.detail.value
    })
  },
  objArrayChange:function (e) {
    console.log('picker值变为',e.detail.value)
    this.setData({
      index2:e.detail.value
    })
  }
})
        运行结果如下:

2.多列选择器 

        多列选择器允许用户从不同列中选择不同的选择项,其选项是二维数组或数组对象。其属性如表所示:

        代码如下:
//wxml
<view>多列选择器</view>
<picker mode="multiSelector" bindchange="bindMultiPickerChange" bindcolumnchange="bindMultiPickerColumnChange"
  value="{{multiIndex}}"
  range="{{multiArray}}">
    <view>
      当前选择:{{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
    </view>
  </picker>
//js
Page({
  data:{
    multiArray:[['陕西省','广东省'],['西安市','汉中市','延安市'],['雁塔区','长安区']],
      multiIndex:[0,0,0]
  },
  bindMultiPickerChange:function (e) {
    console.log('picker发送选择改变,携带值为',e.detail.value)
    this.setData({
      multiIndex:e.detail.value
    })
  },
  bindMultiPickerColumnChange:function (e) {
    console.log('修改的列为',e.detail.column,'值为',e.detail.value);
    var data = {
      multiArray:this.data.multiArray,
      multiIndex:this.data.multiIndex
    };
    data.multiIndex[e.detail.column] = e.detail.value;
    switch(e.detail.column){
      case 0:
            switch(data.multiIndex[0]){
              case 0:
                    data.multiArray[1] = ['西安市','汉中市','延安市'];
                    data.multiArray[2] = ['雁塔区','长安区'];
                    break;
              case 1:
                    data.multiArray[1] = ['深圳市','珠海市'];
                    data.multiArray[2] = ['南山区','罗湖区'];
                    break;
            }
      data.multiIndex[1] = 0;
      data.multiIndex[2] = 0;
      break;
      case 1:
        switch(data.multiIndex[0]){
          case 0:
            switch(data.multiIndex[1]){
              case 0:
                data.multiArray[2] = ['雁塔区','长安区'];
                break;
              case 1:
                data.multiArray[2] = ['汉台区','南郑区'];
                break;
              case 2:
                data.multiArray[2] = ['宝塔区','子长区','延川县'];
                break;
            }
        break;
        case 1:
              switch(data.multiIndex[1]){
                case 0:
                  data.multiArray[2] = ['南山区','罗湖区'];
                  break;
                case 1:
                  data.multiArray[2] = ['香洲区','斗门区'];
                  break;
              }
              break;
        }
    data.multiIndex[2] = 0;
    console.log(data.multiIndex);
    break;    
    }
    this.setData(data);
  },
})
         运行结果如下:

3. 时间选择器、日期选择器

         它们的属性如下:

         代码如下:
//wxml
<view>
<picker mode="date" start="{{startdate}}" end="{{enddate}}" end="{{enddate}}" value="{{date}}" bindchange="changedate">
选择的日期:{{date}}
</picker>
</view>
<view>
<picker mode="time" start="{{starttime}}" end="{{endtime}}" bindchange="changetime">
选择的时间:{{time}}
</picker>
</view>
//js
Page({
  data:{
    startdate:2000,
    enddate:2050,
    date:'2018',
    starttime:'00:00',
    endtime:'12:59',
    time:'8:00'
  },
  changedate:function (e) {
    this.setData({date:e.detail.value});
    console.log(e.detail.value)
  },
  changetime:function (e) {
    this.setData({time:e.detail.value})
    console.log(e.detail.value)
  }
})
        运行结果如下:

 4. 省市选择器

        省市选择器是小程序的新版本提供的快速选择地区的组件,其属性如表所示:

        代码如下:
//wxml
<picker mode="region" value="{{region}}" custom-item="{{cust-omitem}}" bindchange="changregion">
      选择省市区:{{region[0]}},{{region[1]}},{{region[2]}}
</picker>
//js
Page({
  data:{
    region:['陕西省','西安市','长安区'],
    customitem:'全部'
  },
  changeregion:function (e) {
    console.log(e.detail.value)
    this.setData({
      region:e.detail.value
    })
  }
})
        运行结果如下:

4.4.7 picker-view

         代码如下:

//wxml
<view>当前日期:{{year}}年{{month}}月{{day}}日</view>
<picker-view indicator-style="height:50px;" style="width: 100%;height: 300px;" value="{{value}}" bindchange="bindChange">
    <picker-view-column>
      <view wx:for="{{years}}" style="line-height: 50px;">{{item}}年</view>
    </picker-view-column>
    <picker-view-column>
      <view wx:for="{{months}}" style="line-height: 50px;">{{item}}月</view>
    </picker-view-column>
    <picker-view-column>
      <view wx:for="{{days}}" style="line-height: 50px;">{{item}}日</view>
    </picker-view-column>
</picker-view>
//js
const date = new Date()
const years = []
const months = []
const days = []
//定义年份
for(let i = 1900;i<=2050;i++){
  years.push(i)
}
//定义月份
for(let i=1;i<=12;i++){
  months.push(i)
}
//定义日期
for(let i = 1; i<=31;i++){
  days.push(i)
}
Page({
  data:{
    years:years,
    months:months,
    days:days,
    year:date.getFullYear(),
    month:date.getMonth()+1,
    day:date.getDate(),
    value:[118,0,0],
  },
  bindChange:function (e) {
    const val = e.detail.value
    console.log(val);
    this.setData({
      year:this.data.years[val[0]],
      month:this.data.months[val[1]],
      day:this.data.days[val[2]]
    })
  }
})
        运行结果如下:

4.4.8 input

         代码如下:

//wxml
<input placeholder="这是一个可以自动聚焦的input" auto-focus/>
<input placeholder="这个只有在按钮点击的时候才聚焦" focus="{{focus}}" />
<button bingtap="bindButtonTap">使得输入框获得聚焦</button>
<input maxlength="10" placeholder="最大输入长度为10"/>
<view class="section_title">你输入的是:{{inputValue}}
  <input bindinput="bindKeyInput" placeholder="输入同步到view中"/>
</view>
<input bindinput="bindReplaceInput" placeholder="连续的两个1会变成2" />
<input password type="number"/>
<input password type="text"/>
<input type="digit" placeholder="带小数点的数字键盘"/>
<input type="idcard" placeholder="身份证输入键盘"/>
<input placeholder-style="color:red" placeholder="占位符字体是红色的"/>
//js
Page({
  data:{
    focus:false,
    inputValue:""
  },
  bindButtonTap:function () {
    this.setData({
      focus:true
    })
  },
  bindKeyInput:function (e) {
    this.setData({
      inputValue:e.detail.value
    })
  },
  bindReplaceInput:function (e) {
    var value = e.detail.value
    var pos = e.detail.cursor
    if(pos != -1){
      var left = e.detail.value.slice(0,pos)
      pos = left.replace(/11/g,'2').length
    }
    return{
      value:value.replace(/11/g,'2'),
      cursor:pos
    }
    
  }
})

        运行结果如下:

4.4.9 textarea 

        textarea组件为多行输入框组件,可以实现多行内容的输入。其属性如下:

        代码如下:
//wxml
<textarea bindblur="bindTextAreaBlur" auto-height placeholder="自动变高"/>
<textarea placeholder="placeholder颜色是红色的" placeholder-style="{{focus}}"/>
<textarea placeholder="这是一个可以自动聚焦的textarea" auto-focus/>
<textarea placeholder="这个只有在按钮点击的时候才聚焦" focus="{{focus}}"/>
<button bindtap="bindButtonTap">使得输入框获取聚焦</button>
<form bindsubmit="bindFormSubmit">
    <textarea placeholder="form中的textarea" name="textarea" />
    <button form-type="submit">提交</button>
</form>

//js
Page({
  data:{
    height:10,
    focus:false
  },
  bindButtonTap:function () {
    this.setData({
      focus:true
    })
  },
  bindTextAreaBlur:function (e) {
    console.log(e.detail.value)
  },
  bindFormSubmit:function (e) {
    console.log(e.detail.value.textarea)
  }
})
        运行结果如下:

4.4.10 label

        代码如下:
//wxml
<view><checkbox></checkbox>中国</view>
<view><label><checkbox></checkbox>中国</label></view>
<checkbox-group bindchange="cityChange">
<label wx:for="{{citys}}">
<checkbox value="{{item.value}}" checked="{{item.checked}}">{{item.value}}</checkbox>
</label>
</checkbox-group>
<view>您的选择是:{{city}}</view>

//js
Page({
  city:"",
  data:{
    citys:[
      {name:'km',value:'昆明'},
      {name:'sy',value:'三亚'},
      {name:'zh',value:'珠海',checked:'true'},
      {name:'dl',value:'大连'}
    ]
  },
  cityChange:function (e) {
    console.log(e.detail.value);
    var city = e.detail.value;
    this.setData({city:city})
  }
})
        运行结果如下:

4.4.11 form

         form属性如下:

        代码如下:
//wxml
<form bindsubmit="formSubmit" bindreset="formReset">
<view>姓名:
  <input type="text" name="xm" />
</view>
<view>性别:
  <radio-group name="xb">
    <label>
      <radio value="男" checked />男</label>
    <label>
      <radio value="女" />女
    </label>
  </radio-group>
</view>
<view>爱好:
  <checkbox-group name="hobby">
    <label wx:for="{{hobbies}}">
      <checkbox value="{{item.value}}" checked='{{item.checked}}'>{{item.value}}</checkbox>
    </label>
  </checkbox-group>
</view>
<button formType='submit'>提交</button>
<button formType='reset'>重置</button>
</form>
//js
Page({
  hobby:"",
  data:{
    hobbies:[
      {name:'jsj',value:'计算机',checked:'true'},
      {name:'music',value:'听音乐'},
      {name:'game',value:'玩电竞'},
      {name:'swim',value:'游泳',checked:'true'}
    ]
  },
  formSubmit:function (e) {
    console.log('form发生了submit事件,携带数据为:',e.detail.value)
  },
  formReset:function () {
    console.log('form发生了reset事件')
  }
})
        运行结果如下:

4.5 多媒体组件 

        多媒体包括image、audio、video、camera组件。其属性如下:

4.5.1 image       

        缩放模式代码如下:

//wxml
<block wx:for="{{modes}}">
<view>当前图片的模式是:{{item}}</view>
<image mode="{{item}}" src="../image/ji.png" style="width: 100%;height:100%" />
</block>
//js
Page({
  data:{
    modes:['scaleToFill','aspectFit','aspectFill','widethFix']
  }
})

         运行结果如下:

        裁剪模式代码如下: 

//wxml
<block wx:for="{{modes}}">
<view>当前图片的模式是:{{item}}</view>
<image mode="{{item}}" src="./image/leishen.jpg" style="width:100%,height:100%" />
</block>
//js
Page({
  data:{
    modes:['top','center','bottom','left','right','top_left','top_right','bottom_left','bottom_right']
  }
})
        运行结果如下:

        

4.5.2 audio

        audio组件用来实现音乐播放、暂停等,其属性如下:

        代码如下:
//wxml
<audio src="{{src}}" action="{{action}}" poster="{{poster}}" name="{{name}}" author="{{author}}" loop controls></audio>
<button type="primary" bindtap='play'>播放</button>
<button type="primary" bindtap='pause'>暂停</button>
<button type="primary" bindtap='playRate'>设置速率</button>
<button type="primary" bindtap='currentTime'>设置当前时间(秒)</button>
//js
Page({
  data:{
    poster:'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSk.jpg? max_age=2592000',
    name:'此时此刻',
    author:'许巍',
    src:'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3? guid=ffffffff82def4af4b12b3cd9337d5e7uin=346897220vkey=6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACBB8DDD29067D3C67D3C601481D36E62053BFBDFEAF74C0A5CCFADD6471160CAF3E6A&fromtag=46',
  },
play:function(){
  this.setData({
    action:{
      method:'play'
    }
  })
},
pause:function(){
  this.setData({
    action:{
      method:'pause'
    }
  })
},
playRate:function() {
  this.setData({
    action:{
      method:'setPlaybackRate',
      data:10 //速率
    }
  })
  console.log('当前速率:'+this.data.action.data)
},
currentTime:function(){
  this.setData({
    action:{
      method:'setCurrentTime',
      data:120
    }
  })
}
})
        运行结果如下:

4.5.3 video 

        video组件实现视频的播放暂停等,其属性如下:

        代码如下:
//wxml
<video src="{{src}}" controls></video>
<view class="btn-area">
  <button bindtap="bindButtonTap">获取视频</button>
</view>
//js
Page({
  data:{
    src:"",
  },
  bindButtonTap:function() {
    var that = this
    wx.chooseVideo({
      sourceType:['album','camera'],
      maxDuration:60,
      camera:['front','back'],
      success:function(res) {
        that.setData({
          src:res.tempFilePath
        })
      }
    })
  }
})
        运行结果如下:

4.5.4 camera 

        该组件可实现拍照或录像功能,在一个页面中,只能有一个camera组件。其属性如下:

        代码如下:
//wxml
<camera device-position="back" flash="off" binderror="error" style="width: 100%;height: 350px;"></camera>
<button type="primary" bindtap="takePhoto">拍照</button>
<view>预览</view>
<image mode="widthFix" src="{{src}}"></image>
//js
Page({
  takePhoto(){
    const ctx = wx.createCameraContext()
    ctx.takePhoto({
      quality:'high',
      success:(res)=>{
        this.setData({
          src:res.tempImagePath
        })
      }
    })
  },
  error(e){
    console.log(e.detail)
  }
})
        运行结果如下:

 4.6 其他组件

        除了前面介绍的组件以外,map和canvas组件比较常用。

        map组件用于在页面中显示地图或路径,canvas组件用来绘制图形,相当于一块无色透明的普通画布。

        map属性如下:

        map中markers属性如下:

         map中polyline属性如下:

        代码如下:
//wxml
<map id= "map"
    longitude="108.9200"
    latitude="34.1550"
    scale="14"
    controls="{{controls}}"
    bindcontroltap="controltap"
    markers="{{markers}}"
    bindmarkertap="markertap"
    polyline="{{polyline}}"
    bindregionchange="regionchange"
    show-location
    style="width: 100%;height: 300px;">
</map>
//js
Page({
  data:{
    markers:[{
      iconPath:"pages/dw.png",
      id:0,
      longitude:"108.9290",
      latitude:"34.1480",
      width:50,
      height:50
    }],
    polyline:[{
      points:[
        {
        longitude:"108.9200",
latitude:"34.1400"
        },
        {
          longitude:"108.9200",
  latitude:"34.1500"
          },
          {
            longitude:"108.9200",
    latitude:"34.1700"
            }
      ],
      color:"#00ff00",
      width:2,
      dottedLine:true
    }],
    controls:[{
      id:1,
      iconPath:'pages/dw.png',
      position:{
        left:0,
        top:300,
        width:30,
        height:30
      },
      clickable:true
    }]
  },
  regionchange(e){
    console.log(e.type)
  },
  markertap(e){
    console.log(e.markerId)
  },
  controltap(e){
    console.log(e.controlId)
  }
})
        运行结果如下:

        canvas属性如下:

        代码如下:

//wxml
<canvas canvas-id="myCanvas" style="border: 1px solid red;"/>
//js
Page({
  onLoad:function (options) {
    var ctx = wx.createCanvasContext('myCanvas')
    ctx. setFillStyle('green')
    ctx.fillRect(10,10,200,100)
    ctx.draw()
  }
})
        运行结果如下:

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值