Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:影院组件
目录
影院组件
组件渲染
组件页面
影院页面元素设置及渲染,示例如下:
html
<template>
<div>
<ul>
<li v-for="data in cinemaList" :key="data.cinemaId">
<div class="left">
<div class="cinema_name">{{data.name}}</div>
<div class="cinema_text">{{data.address}}</div>
</div>
<div class="right cinema_name">
<div style="color:red">¥ {{data.lowPrice / 100}} 起</div>
</div>
</li>
</ul>
</div>
</template>
请求数据
请求数据并赋值,示例如下:
html
<script>
import http from '@/util/http'
export default {
data () {
return {
cinemaList: []
}
},
mounted () {
http({
url: '/api/gateway?cityId=130100&ticketFlag=1&k=8627209',
headers: {
'X-Host': 'mall.film-ticket.cinema.list',
'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"17479694011920413022027777","bc":"130100"}'
}
}).then(res => {
this.cinemaList = res.data.data.cinemas
})
}
}
</script>
设置样式
对页面元素进行样式美化,示例如下:
html
<style lang="scss" scoped>
li {
padding: 0.833333rem;
display: flex;
justify-content: space-between;
.left {
width: 11.777778rem;
}
.cinema_text {
color: #797d82;
font-size: 12px;
margin-top: 5px;
// 超出文字隐藏
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
</style>
组件优化
使用betterScroll实现页面拖动滚动、拉动属性等功能对影院页面进行优化。
增加外包装
在整个组件外部div上设置类,对类设置固定高度。示例如下:
html
<template>
<div class="box">
<ul>
<li v-for="data in cinemaList" :key="data.cinemaId">
<div class="left">
<div class="cinema_name">{{data.name}}</div>
<div class="cinema_text">{{data.address}}</div>
</div>
<div class="right cinema_name">
<div style="color:red">¥ {{data.lowPrice / 100}} 起</div>
</div>
</li>
</ul>
</div>
</template>
样式设置
css
.box {
height: 300px;
overflow: hidden;
}
安装
安装命令
bash
npm install better-scroll
增加滚动条
javascript
import BetterScroll from 'better-scroll'
等待数据获取完成 dom渲染完了,进行初始化并增加滚动条
javascript
http({
url: '/api/gateway?cityId=130100&ticketFlag=1&k=8627209',
headers: {
'X-Host': 'mall.film-ticket.cinema.list',
'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"17479694011920413022027777","bc":"130100"}'
}
}).then(res => {
this.cinemaList = res.data.data.cinemas
this.$nextTick(() => {
new BetterScroll('.box', {
scrollbar: {
fade: true
}
})
})
})
滚动条错位 使用定位解决
css
.box {
height: 300px;
overflow: hidden;
position: relative;
}
盒子高度动态计算
样式中的高度设置隐藏掉
然后盒子改为动态计算后赋值
html
<template>
<div class="box" :style="{height: height}">
初始值定为0px
javascript
export default {
data () {
return {
cinemaList: [],
height: '0px'
}
},
计算方式:当前页面高度减去选项卡高度
javascript
mounted () {
// 动态计算高度 整体高度减去底部导航栏高度
this.height = document.documentElement.clientHeight - document.querySelector('footer').offsetHeight + 'px'
http({
url: '/api/gateway?cityId=130100&ticketFlag=1&k=8627209',
headers: {
'X-Host': 'mall.film-ticket.cinema.list',
'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"17479694011920413022027777","bc":"130100"}'
}
}).then(res => {
this.cinemaList = res.data.data.cinemas
this.$nextTick(() => {
new BetterScroll('.box', {
scrollbar: {
fade: true
}
})
})
})
}
}
总结
Vue 渐进式JavaScript 框架 基于Vue2的移动端项目:影院组件