一、条件语句和数学函数的使用  案例:

y=|x| (x<0)

y=e的x次方*sinx  (0<=x<10)

y=x的3次方  (10<=x<20)

y=(3+2*x)lnx   (x>=20)

<!--index.wxml-->
<view class='box'>
  <view class="title">条件语句和数学函数</view>
  <view>
    <input placeholder="请输入x的值" bindblur="calc"></input>
  </view>
  <view>计算y的值为:{{y}}</view>
</view>
/* pages/index/index.wxss */

input {
  margin: 20px 0; /*设置input组件上下边距为20px,左右边距为0*/
  border-bottom: 1px solid blue; /*设置input组件下边框粗细为1px、实心、蓝色*/
}
//index.js

Page({
  //事件处理函数
  calc:function(e){
    var x, y;//定义局部变量x和y
    x = e.detail.value;//获取input组件的value值并赋值给x
    if(x<0){//根据x值进行判断,并求出y的值
    y = Math.abs(x);
    }else if(x<10){
      y=Math.exp(x)*Math.sin(x);
    }else if(x<20){
      y=Math.pow(x,3);
    }else{
      y=(3+2*x)*Math.log(x);
    }
    this.setData({
      y:y//将局部变量y赋值给绑定变量y,把y的值通过setData函数返回到wxml文件,也就是视图层
    })
  }
})

二、JavaScript 中的逻辑运算符 &&button组件的使用方法  案例:学生成绩平均分计算

<!--index.wxml-->
<view class='box'>
  <view class='title'>成绩计算器</view>
  <!--placeholder-class设置提示文本样式,在wxss里面定义,样式名placeholder;bindinput输入时引发的事件,调用的nameInput函数;type='number'整数,输入时弹出不带小数点的数字键盘-->
  <input placeholder="请输入你的名字" placeholder-class="placeholder" bindinput='nameInput'></input>
  <input placeholder="请输入语文成绩" placeholder-class="placeholder" bindinput='chineseInput' type='number'></input>
  <input placeholder="请输入数学成绩" placeholder-class="placeholder" bindinput='mathInput' type='number'></input>
  <!--bindtap点击按钮事件对应的事件函数mysubmit,js中定义-->
  <button bindtap='mysubmit'>提交</button>
  <!--hidden属性对应的flag,默认是true,隐藏的,通过flag控制下方区域是否显示;整体的布局和样式用的content-->
  <view hidden='{{flag}}' class='content'>
    <!--内嵌了四个view组件,对应的样式属性content-item;{{name}}数据的绑定-->
    <view class='content-item'>姓名:{{name}}</view>
    <view class='content-item'>语文成绩:{{chinese_score}}</view>
    <view class='content-item'>数学成绩:{{math_score}}</view>
    <view class='content-item'>平均分:{{avrage}}</view>
  </view>
</view>
/* pages/index/index.wxss */

page {/* 针对整个页面*/
  background: #f1f0f6;
}

.placeholder {/* 占位符文字样式*/
  font-size: 15px;
}

input {/* input组件样式*/
  background: #fff;
  height: 120rpx;
  margin: 10px;/*边距*/
  padding-left: 8px;/* 左内边距*/
  border: solid 1px silver;
}

button {
  margin: 30rpx 50rpx;
  background-color: red;
  color: white;/*文本颜色*/
}

.content {
  background: #fff;
  padding: 10px;
  color: #f00;
}

.content-item {
  padding: 3rpx;
  font-size: 16px;
  line-height: 30px;
}
//index.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    /**flag: true下面显示结果的区域不显示;绑定的数据一开始都是没有数值的*/
    flag: true,
    name: '',
    chinese_score: '',
    math_score: '',
    avrage: ''
  },
  //事件绑定函数
  nameInput: function(e) {
    this.setData({
      name: e.detail.value
    });
  },
  chineseInput: function(e) {
    this.setData({
      chinese_score: e.detail.value
    });
  },
  mathInput: function(e) {
    this.setData({
      math_score: e.detail.value
    });
  },
  mysubmit: function() {
    if (this.data.name == '' || this.data.chinese_score == '' || this.data.math_score == '') {
      return;
    } else {
      //*1是为了字符变数字,一开始输入的数字默认是字符类型,如果不乘1,就是字符串相加,结果就不对了
      var avg = (this.data.chinese_score * 1 + this.data.math_score * 1) / 2;
      this.setData({
        avrage: avg,
        flag: false
      });
    }
  }
})

 

 

 button组件—常用属性 

属性合法值 

三、JavaScript循环语句的执行过程 &&JavaScript中全局对象函数的使用方法 &&全局变量的定义和使用方法  案例:利用循环语句求两个整数间数字之和

<!--index.wxml-->
<view class='box'>
  <view class='title'>利用循环语句求和</view>
  <view>
    <input placeholder='请输入起点数值' type='number' bindblur='startNum'></input>
    <input placeholder='请输入终点数值' type='number' bindblur='endNum'></input>
  </view>
  <view>两个数之间的和为:{{sum}} </view>
  <button type='primary' bindtap='calc'>求和</button>
</view>
/* pages/index/index.wxss */

input {
  border-bottom: 1px solid blue; /* 添加input组件的下边框线 */
  margin: 20px 0; /* input组件上下外边距为20px,左右外边距为0 */
}

button {
  margin-top: 20px; /* 设置button组件的上边距为20px */
}
//index.js
var start, end, sum; //定义起点数、终点数和求和结果三个全局变量
Page({
  startNum: function(e) {
    start = parseInt(e.detail.value); //将input组件value值转换为整数并赋值,默认输入的是字符类型
  },
  endNum: function(e) {
    end = parseInt(e.detail.value); //将input组件value值转换为整数并赋值
  },
  calc: function() {
    sum = 0;
    for (var i = start; i <= end; i++) {
      sum = sum + i; //利用for循环求和
    }
    this.setData({
      sum: sum //将全局变量sum的值渲染到视图层
    })
  }
})

 

 

JavaScript 支持的循环类型包括:

for:多次遍历代码块

for/in:遍历对象属性

while:当指定条件为 true 时循环一段代码块

do/while:当指定条件为 true 时循环一段代码块 

for 循环—语法

  for (语句 1; 语句 2; 语句 3)

    {     

    要执行的代码块

    }

  语句 1 在循环(代码块)开始前执行

  语句 2 定义运行循环(代码块)的条件

  语句 3 在循环(代码块)已被执行之后执行 

for/in 循环—样例
  循环遍历对象的属性。例如:

var person =  {fname:"Bill", lname:"Gates",age:62};  var text = ""; for (var x in person) {     text += person[x]; } 

  循环结束后,text的值为:"BillGates62" 

while 循环—语法
  在指定条件为真时循环执行代码块。语法为: while (条件) { 要执行的代码块 }
do/while 循环—语法 
  do { 要执行的代码块 } while (条件); 

JavaScript全局对象

  可用于所有内建的 JavaScript 对象,其常用 属性和方法如表所示

  

 

全局变量的定义和使用 

  在所有函数之外定义的变量称为全局变量,该变量可以在该文件的所有函数中使用。

 

四、对象的概念 &&JavaScript中Array对象函数的使用方法&&Number对象函数的使用方法  案例:随机数求和 

<!--index.wxml-->
<view class="box">
  <view class='title'>随机数求和</view>
  <view>产生的随机数列为:</view>
  <!--通过一个列表渲染,rand是从js文件中传过来的一个数组,item显示的数组中每一个元素的值-->
  <view wx:for="{{rand}}">{{item}}</view>
  <view>随机数列的和为:{{sum}}</view>
  <button type='primary' bindtap='newRand'>产生新的随机数</button>
</view>
//index.js
var rand, sum;//定义全局变量
function createRand() {//自定义的全局函数
  rand = []; //初始化数组变量
  sum = 0; //初始化sum变量
  for (var i = 0; i < 6; i++) {
    var r = (Math.random() * 100).toFixed(2) * 1; //产生100以内的保留小数点后2位的随机数并转换为数值类型;Math.random() 产生0-1的随机数,*100,0-100的随机数,toFixed(2)产生的随机数保留后两位小数,默认产生的字符类型,*1,变成数值类型
    rand.push(r); //将产生的随机数添加到数组中
    sum += rand[i]; //随机数列求和
    console.log(rand[i]); //在控制台显示数组元素
  }
  console.log(sum);
};

Page({
  onLoad: function () {
    createRand(); //调用产生随机数函数;一开始运行的时候就显示了一系列数组元素,因为在onLoad里直接调用了createRand函数,然后把函数元素直接发送到视图层,然后在这边显示了,这样把逻辑层的rand和sum直接渲染到了wxml文件。
    this.setData({
      rand: rand,
      sum: sum
    })
  },
  newRand: function () {
    createRand(); //调用产生随机数函数
    this.setData({
      rand: rand,
      sum: sum
    })
  }
})

对象的概念 

   对象是拥有属性和方法的数据,属性是静态数据, 方法是能够在对象上执行的动作,即动态数据。 

  JavaScript 中的常用对象包括:字符串、数字、    数组、日期,等等。 

Array 对象 

  用于在单个的变量中存储多个值,其常用属性和方法如表所示

  

  

 

 

Number 对象 

  该对象是原始数值的包装对象,其常用属性和方法如表所示

  

  

五、setTimeout()的使用方法&&clearTimeout()的使用方法&&setInterval()的使用方法&&clearInterval()的使用方法 案例:计时器 

案例描述 :

设计一个实现倒计时功能的小程序,小程序运行后,首先显示空白界面,过2秒后才显示计时界面,点击“开始计时”按钮后开始倒计时,点击“停止计时”按钮后停止计时。 

 

<!--index.wxml-->
<view class='box' hidden='{{hidden}}'>
  <view class='title'>计时器</view>
  <view class='time'>{{num}}</view>
  <view class='btnLayout'>
    <button bindtap='start'>开始计时</button>
    <button bindtap='stop'>停止计时</button>
  </view>
</view>
/* pages/index/index.wxss */

.time {
  width: 90%;
  line-height: 200px; /* 设置高度并使文字垂直居中 */
  background-color: yellow;
  color: red;
  font-size: 100px;
  text-align: center;
  border: 1px solid silver;
  border-radius: 30px; /*边框半径, 四个圆角过渡 */
  margin: 15px;
}

.btnLayout {
  display: flex;
  flex-direction: row;
}

button {
  width: 45%;
}
//index.js

var num = 60; //计时器显示的数字
var timerID; //计时器ID
Page({
  data: {
    hidden: true, //小程序运行时不显示计时界面
    num: num //将全局变量赋值给绑定变量
  },

  onLoad: function (options) {//程序一加载就调用这个函数
    var that = this;//setTimeout函数中用到了回调函数"() => {that.show()}",回调函数一调用,有可能改变this的值,因此要把this赋值给that
    setTimeout(() => {
      that.show()
    }, 2000) //2秒钟后显示计时界面;程序一加载,2秒钟后调用回调函数() => {that.show()}只调用一次,回调函数中调用了show函数
  },

  show: function () { //显示计时界面函数
    var that = this;
    that.setData({
      hidden: false //显示计时界面
    })
  },

  start: function () { //开始计时函数
    var that = this;
    timerID = setInterval(() => {
      that.timer()
    }, 1000) //每隔1s调用一次timer函数;第一个参数是回调函数,第二个参数是时间
  },

  stop: function () { //停止计时函数
    clearInterval(timerID) //清除计时器
  },

  timer: function () { //计时函数
    var that = this;
    console.log(num)
    if (num > 0) {
      that.setData({
        num: num-- //每次减1
      })
    } else {
      that.setData({
        num: 0
      })
    }
    console.log(num)
  }

})
/**app.wxss**/
.box{
  border: 1px solid silver;
  margin: 10rpx;
  padding: 20rpx;
}
.title{
font-size: 25px;
text-align: center;
margin-bottom: 15px;
color: rgb(241, 143, 143);
}

JavaScript中的4个函数: 

setTimeout()函数

  setTimeout(function callback, number delay, any rest)。设定一个计时器,在计时到期以后执行注册的回调函数。隔一定时间后只执行一次

  返回值是number,第一个参数回调函数,第二个参数设定的时间间隔,第三个参数任意类型的rest,附近的参数,可以有多个

clearTimeout() 函数

  clearTimeout(number timeoutID)。取消由 setTimeout 设置的计时器。参数 timeoutID为 要取消的计时器的 ID。 
setInterval() 函数

  setInterval(function callback, number delay, any rest)。设定一个计时器,按照指定的周期(以毫秒计)来执行注册的回调函数。 每隔一定时间要执行一次

  返回值是number
clearInterval()函数

  clearInterval(number intervalID)。取消 由 setInterval 设置的计时器。参数 intervalID为要取消的计时器的ID。 

 

六、综合运用双重for循环、数组、 Math函数、全局对象函数等  案例:自动随机变化的 三色旗 

案例描述:设计一个小程序,开始时界面上显示一个三色旗和一个按钮,当点击按钮时,三色旗的颜色会发生随机变化,即使不点击按钮,三色旗的颜色也会每隔一定时间自动发生变化。

创建随机颜色的设计思想:从构成颜色的16个16进制 字符(0~F)中随机随机找出6个字符构成一种颜色, 连续找3次就可以生成3种随机颜色。

<!--index.wxml-->
<view class="box">
  <view class='title'>变化的三色旗</view>
  <view class="flex-wrp">
    <view class="item" style="background-color:{{color1}}"></view>
    <view class="item" style="background-color:{{color2}}"></view>
    <view class="item" style="background-color:{{color3}}"></view>
  </view>
  <button type='primary' class='btn' bindtap="changeColor">改变颜色</button>
</view>
/**app.wxss**/
.box{
  border: 1px solid silver;
  margin: 20rpx;
  padding: 20rpx;
}
.title{
font-size: 25px;
text-align: center;
margin-bottom: 15px;
color: rgb(241, 143, 143);
}
/* pages/index/index.wxss */
.flex-wrp{
  margin-top: 50rpx;
  display:flex;
  flex-direction: row;
}
.item{
  width: 300rpx;
  height: 500rpx;  
}
.btn{
  margin-top: 20rpx;
  margin-bottom: 20rpx;
  width: 100% !important;
}
//index.js

Page({
  createColor: function () { //自定义函数,创建三种随机颜色
    var color = []; //定义数组
    var letters = '0123456789ABCDEF'; //定义16进制颜色字符集
    for (var i = 0; i < 3; i++) { //利用循环创建三种随机颜色
      var c = '#';
      for (var j = 0; j < 6; j++) { //创建一种由6个16进制字符构成的随机颜色
        c += letters[Math.floor(Math.random() * 16)]
      }
      color.push(c); //将创建的颜色加入颜色数组
    }
    console.log(color); //在console面板中显示颜色值
    this.setData({ //将创建的颜色渲染到视图层
      color1: color[0],
      color2: color[1],
      color3: color[2]
    })
  },

  onLoad: function (e) {//onLoad生命周期函数
    this.createColor(); //利用this调用本类定义的函数
    setInterval(() => { //每隔5秒钟调用一次this.createColor()函数
      this.createColor();
    }, 5000);
  },

  changeColor: function (e) { //点击按钮时的事件函数
    this.createColor();
  }
})
Math.random() * 16:0到16之间,不包括16的浮点数
Math.floor(Math.random() * 16):0到16之间,不包括16的整数。即0-15