小程序学习:电影周周看

/* 头像图片 */

.about_img{

width: 375rpx;

height: 375rpx;

border-radius: 50%;

}

/* 电影周周看 */

#about_zzk{

font-weight: bold;

font-size: 60rpx;

}

vh 说明:

相对于视口的高度。视口被均分为100单位的vh

示例代码:

h1 {

font-size: 8vh;

}

如果视口的高度是200mm,那么上述代码中h1元素的字号将为16mm,即(8x200)/100

2.7 新增“每周推荐”WEEKLY页并快速调试


每一个用户可能访问到的页面,都需要在前局配置中来登记他的访问路径。

weekly.js:调用page配置函数,来给页面注册一个空对象  Page({})

weekly.json:使用  { } 创建空的json对象配置文本

weekly.wxml:

本周推荐

憨豆先生

点评:最精彩的剧本是最真实的黑帮电影

weekly.wxss:

.container{

background-color: #eee;

height: 100vh;

display: flex;/变为flex container 元素从左往右/

flex-direction: column;/改为垂直从上往下/

justify-content: space-around;/在主轴方向上的聚集和分布方式/

align-items: center;/居中/

}

2.8 使用NAVIGATOR组件-从ABOUT页跳转到WEEKLY页


display: black  块状元素

display: inline

open-type="redirect"不可返回

open-type=“navigate”  默认可返回

open-type=“redirect” 不可返回

about.wxml

电影周周看

每周推荐 一部好片</text

我的微博:weibo.com/@星空风月

about.wxss

.container{

background-color: #eee;

height: 100vh;

display: flex;/变为flex container 元素从左往右/

flex-direction: column;/改为垂直从上往下/

justify-content: space-around;/在主轴方向上的聚集和分布方式/

align-items: center;/居中/

}

/* 头像图片 */

.about_img{

width: 375rpx;

height: 375rpx;

border-radius: 50%;

}

/* 电影周周看 */

#about_zzk{

font-weight: bold;

font-size: 60rpx;

}

/* 默认蓝色放在前 */

.nav-default{

color: blue;

}

/* 点击后的红色放在后面 */

.nav-hover{

color: red;

}

2.9 配置TABBAR-对若干一级页面的入口链接


元素点击无效,设置

open-type=“switchTab”跳转并改变tabBar图标跳转

app.json中使用tabBar属性

{

“pages”: [

“pages/about/about”,

“pages/weekly/weekly”

],

“tabBar”: {

“list”: [

{

“pagePath”: “pages/weekly/weekly”,

“text”: “每周推荐”,

“iconPath”: “pages/images/icons/weekly.png”,

“selectedIconPath”: “pages/images/icons/weekly-selected.png”

},

{

“pagePath”: “pages/about/about”,

“text”: “关于”,

“iconPath”: “pages/images/icons/about.png”,

“selectedIconPath”: “pages/images/icons/about-selected.png”

}

],

“color”: “#000000”,

“selectedColor”: “#00f”

}

}

“color”: “#000000”,

“selectedColor”: “#00f”

2.10 配置全局的导航栏样式


顶部导航栏样式默认使用黑底白字

代码直接复制的方法必然会带来代码升级时候的问题

app.json中使用Windows属性

“window”: {

“navigationBarBackgroundColor”: “#ffffff”,

“navigationBarTextStyle”: “black”,

“navigationBarTitleText”: “电影周周看”,

“backgroundColor”: “#eeeeee”,

“backgroundTextStyle”: “light”,

“enablePullDownRefresh”: false

}

第三讲 电影周周看v2

===========

3.1 数据绑定


一般方法通过ajax调用server的数据

weekly.js 里面添加数据变量:

Page({

data: {

thisWeekMoview: [

{

name: “教父”,

comment: “最精彩的剧本,最真实的黑帮电影。”,

imagePath: “/images/jf.jpg”

}

],

count: 123

}

})

weekly.wxml页面

本周推荐

{{thisWeekMovie.name}}

点评:{{thisWeekMovie.comment}}

3.2 小程序运行环境与基本架构 VIDEO


在小程序调试窗口里面的 AppData,可以对页面里的数据进行调试。我们可以看到,小程序给页面 weekly 添加了一个变量 webviewId 等于10。这个是做什么用的呢?

这就需要了解小程序的运行环境和运行架构。

运行环境: 每个小程序都是运行在它所在的微信客户端上的,通过微信客户端给它提供运行环境,小程序可以直接获取微信客户端的原生体验和原生能力。

视力层和逻辑层: 小程序的运行环境分成渲染层和逻辑层,其中 WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层。小程序的渲染层和逻辑层分别由2个线程管理:渲染层的界面使用了WebView 进行渲染;逻辑层采用JsCore线程运行JS脚本。一个小程序存在多个界面,所以渲染层存在多个WebView线程,这两个线程的通信会经由微信客户端做中转,逻辑层发送网络请求也经由Native转发,小程序的通信模型下图所示。

所以,刚才我们在 AppData 中可以看到,about页和weekly页都内置了一个 webviewId 的内部状态变量,记录它们各自是在几号 webview 进程中进行渲染的。

3.3 条件渲染


条件渲染指的是:条件成立时才渲染生成。

拿上面的例子来看,我们给推荐页面的电影添加一个这段,表明这个电影是不是强烈推荐的。

isHighlyRecommended: true

我们现在要做的一个改动就是,希望在视图中,对于真正想强烈推荐的电影,我们要显示一个强烈推荐的红色标记。

首先我们把强烈推荐的元素定义出来,添加到 weekly.wxml 中:

强烈推荐

这时可以看到,在视图中,出现了红色的 “强烈推荐” 的字样。

但是这个是肯定会生成的,但我们需要的效果是,如果电影是要推荐的,就生成;不是推荐的,就不生成。

所以,我们就可能 通过 wx:if 做条件判断来实现。代码可以修改为:

强烈推荐

这个意思是,强烈推荐这个 text 元素,渲梁生成的条件是:绑定到了 thisWeekMoview 的 isHighlyRecommended 属性上。当这个属性是 true 的情况下,这个 text 元素会被生成,如果这个属性是 false 的情况下,这个 text 元素就不会生成。

同时,我们也可以使用 hidden 属性来实现这个效果。 代码如下:

强烈推荐

这里注意是求反的操作。当用户没有推荐的时候,hidden是true;用户强烈推荐的时候,hidden是false,所以是求反的操作。

此时,我们在 AppData 里面进行查看,可以看到,这个 text 元素无论 hidden 是取 true 还是 false,都始终是生成的。因此,我们可以知道,使用 hidden 属性时,这个元素总是要被渲染生成的,hidden 只是控制了其可见性而已。

那么,在实际应用中,我们该如何选择呢?

从上面的例子我们可以看到,当wx:if的条件值切换时,框架有一个局部渲染的过程,他会确保条件在切换是销毁或者重新渲染。同时wx:if也是有惰性的,如果初始渲染条件为false,框架什么也不会做,只有在条件第一次变为真的时候才会开始渲染。因此,对于可见性需要频繁切换的时候,不建议使用条件渲染,因为它的开销会比较大,这个时候就使用 hidden

对于我们的这个例子,我们要如何选择呢? 当电影列表从服务器获得以后,用户就不会对是否推荐的信息进行修改。意思就是,强烈推荐这个元素的渲染条件,用户是不会去发生切换的。所以这个时候,我们应该使用 条件渲染来做 这件事情。这个时候如果使用 hidden,他的初始化开销会增大。博主没有去推荐这个电影,它也会在初始生成的时候,去生成这么一个元素。

3.4 列表渲染


原来的weekly.wxss

.container{

background-color: #eee;

height: 100vh;

display: flex;/变为flex container 元素从左往右/

flex-direction: column;/改为垂直从上往下/

justify-content: space-around;/在主轴方向上的聚集和分布方式/

align-items: center;/居中/

}

原来的weekly.wxml

本周推荐

{{thisWeekMovie.name}}

点评:{{thisWeekMovie.comment}}

※ 强烈推荐

现在的:

weekly.wxss

.movie{

display: flex;

}

.movie-details{

display: flex;

flex-direction: column;

width: 550rpx;

}

.movie-image{

width: 200rpx;

height: 200rpx;

}

weekly.wxml

第{{index+1}}周:{{item.name}}

点评:{{item.comment}}

※ 强烈推荐

weekly.js

Page({

data: {

WeeklyMovieList:[

{

name: “泰坦尼克号”,

comment: “失去的才是永恒的”,

imagePath: “/images/titanic.jpg”,

isHighlyRecommended: false,

},

{

name: “这个杀手不太冷”,

comment: “小萝莉与怪蜀黍纯真灿烂的爱情故事”,

imagePath: “/images/leon.jpg”,

isHighlyRecommended: false,

},

{

name: “教父”,

comment: “最精彩的剧本,最真实的黑帮电影。”,

imagePath: “/images/jf.jpg”,

isHighlyRecommended: true,

}

]

}

})

3.5 使用SWIPER组件


weiper元素默认:150像素高,image元素默认:240元素高

sweiper元素设置的宽高weiper-item百分百比例显示

indicator-dots=“ture” 属性显示面板指示

3.6 页面的生命周期函数


需求1:

对于 swiper ,要设置默认显示的那页幻灯片,可以添加一个 current 属性,这个属性默认值是0。也就是说,首张幻灯片页是默认显示的。现在要做的是,因为用户每次最想看到的是,本周推荐的页。所以,要把 swiper 默认设置成最后一页幻灯片。

最后一页的序号是 数组长度减1。解决方案是,把 current 属性这样绑定:

current = ‘{{weeklyMovieList.length-1}}’

需求2:

  • 进而会引出 onLoad 生命周期函数,可以查看如何对元素进行初始化;

  • 介绍 onShow, onReady, onHide, onUnload 生命周期函数。

bindtap绑定事件处理函数f0

返回本周

返回本周

onLoad: function (options) {

this.setData({

currentIndex: this.data.weeklyMovieList.length - 1

})

},

onload,事件会在页面或图像加载完成后立即发生。

onShow, 当页面每一次显示,都要调一次,每一次页面从隐藏到可见,都会调用

onReady, 等页面渲染完成,全部好了,已经可以交互的时候被调用一次

onHide, 当页面每次隐藏的时候调用一次

onUnload,当页面被关闭或卸载的时候调用

position:relative;相对定位

position:absolute;相对定位

3.7 更新数据

在这里,展示了一种数据更新的方式,就是直接像下面函数的形式来进行更新:

f0: function(event){

this.data.count = this.data.count + 1

}

反复点击按钮,会发现页面显示并没有更新。但是进入 AppData 查看,可以发现 count 的值已经更新到了 9。

所以,这种通过对变量直接赋值写入的方式,不能让框架自动更新,而且,非常容易引起数据不一致问题。所以,对小程序中的变量进行更新,不能采取直接赋值的方式,而必须采用小程序提供的 this.setData 方法。

发现实际的写法为:

f0: function (event) {

this.setData({

currentIndex: this.data.weeklyMovieList.length - 1

})

}

3.8 事件机制


前面的应用里,我们已经使用了事件函数。这一节我们要讲解如下事项:

  • 事件绑定

  • 冒泡事件与非冒泡事项

  • bind 绑定 VS catch 绑定

  • 事件对象简介

  • 对于点击的操作有两种处理方式:

+1

+1

这两种有什么区别呢?首先我们要了解冒泡事件和非冒泡事件。小程序中事件分为冒泡事件和非冒泡事件:

  • 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。

  • 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

  • 在小程序事件系统文档中,给出了哪些是冒泡事件。

对于 bindtap ,如果事件触发了,就会向上传递给父元素。也就是说,button 如果点击了,就会传递给外边的 view 元素,如果 view 元素里面自己也有一个 bindtap 函数,它也会调用这个函数进行处理。

相反,如果这里使用 catchtap ,那么点击以后,就会阻止元素向上传递。也就是说,按钮点击以后,只会处理自己的函数,但外层的 view 元素,就不会进行相应处理。

接着,我们看看事件对象包含哪些信息。我们把f0函数修改如下:

f0: function(event){

console.log(event)

}

点击以后,可以在 log 里看到如下事件触发后,方方面面的信息,具体如下:

在这里插入图片描述

比如说事件的类型,是一个 tap 事件,还有一个是 currentTarget ,指向的是当前事件处理的元素。可以观察到,currentTarget 还有一个 dataset 属性,这个还会在后边讲到。

第四讲 电影周周看v3

===========

4.1 组件的自定义数据属性


继续完善电影周周看微信小程序,

  • 需求:从weekly 页面上的电影卡片跳转到电影详情页,因此,要新增 detail页面

  • 使用 wx.navigateTo()

  • 参数化的 page path

  • 组件的自定义数据属性:向逻辑层的业务数据传递

首先,新建details页面,这里给出 detail页的基本代码:

details.wxml

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

image

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

image

Target 还有一个 dataset 属性,这个还会在后边讲到。

第四讲 电影周周看v3

===========

4.1 组件的自定义数据属性


继续完善电影周周看微信小程序,

  • 需求:从weekly 页面上的电影卡片跳转到电影详情页,因此,要新增 detail页面

  • 使用 wx.navigateTo()

  • 参数化的 page path

  • 组件的自定义数据属性:向逻辑层的业务数据传递

首先,新建details页面,这里给出 detail页的基本代码:

details.wxml

总结

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷!

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

[外链图片转存中…(img-7FylQGub-1718920793247)]

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

[外链图片转存中…(img-H2pBnSZY-1718920793247)]

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值