goods

<template>
<div class="goods">
<div class="menu-wrapper" ref="menuWrapper">
<ul>

<li v-for="(item, index) in goods" class="menu-item" :class="{'current': currentIndex === index}"
@click="selectMenu(index,$event)">
<span class="text border-1px" ref="menuList">
<span v-show="item.type>0" class="icon" :class="classMap[item.type]"></span>{{ item.name }}
</span>
</li>
</ul>
</div>
<div class="food-wrapper" ref="foodWrapper">
<ul>
<li v-for="item in goods" class="food-list" ref="foodList">
<h1 class="title">{{item.name}}</h1>
<ul>
<li v-for="food in item.foods" class="food-item">
<div class="icon">
<img :src="food.icon" width="57" height="57"/>
</div>
<div class="content">
<div class="name">{{food.name}}</div>
<p class="dec">{{food.description}}</p>
<div class="extra">
<span class="sellCount">月售{{food.sellCount}}份</span>
<span class="rating">好评率{{food.rating}}%</span>
</div>
<div class="price">
<span class="now">¥{{food.price}}</span>
<span v-show="food.oldPrice" class="oldPrice">¥{{food.oldPrice}}</span>
</div>
</div>
</li>
</ul>
</li>
</ul>
</div>
</div>

</template>
<script type="text/ecmascript-6">
import BScroll from 'better-scroll'
const ERROK = 0
export default {
props: {
seller: {
type: Object
}
},
data() {
return {
goods: [],
listHeight: [], // 定义一个变量数组来存储每个item的高度
scrollY: 0 // 滚动的y轴坐标
}
},
created() {
this.classMap = ['decrease', 'discount', 'special', 'invoice', 'guarantee']
this.$http.get('/api/goods').then((response) => {
response = response.body
if(response.errno === ERROK){
this.goods = response.data
console.log(response.data)
this.$nextTick(() => {
this._initScroll()
this._calculateHeight()
})
}
})
},
computed: {
// 3.计算menu当前的index
currentIndex() {
for(let i = 0; i < this.listHeight.length; i++) {
let height1 = this.listHeight[i]
let height2 = this.listHeight[i + 1]
if(!height2 || (this.scrollY >= height1 && this.scrollY < height2)) {
this._followScroll(i)
return i
}
}
return 0
}
},
methods: {
// 6. 点击某个menu,foodList列表跳转
selectMenu(index, event) {
// 解决浏览器点击事件响应两次的问题
if(event._constructed) {
return
}
let foodList = this.$refs.foodList
let el = foodList[index]
this.foodsScroll.scrollToElement(el, 300)
},
_initScroll() {
this.menuScroll = new BScroll(this.$refs.menuWrapper, {})
this.foodsScroll = new BScroll(this.$refs.foodWrapper, {
click: true,
probeType: 3 // 探针,实时监听滚动位置
})
// 2.获取滚动的高度
this.foodsScroll.on('scroll', (pos) => {
if(pos.y <= 0) {
this.scrollY = Math.abs(Math.round(pos.y))
}
})
},
// 1.计算每个item的高度,记得在li里面添加ref标签来获取dom
_calculateHeight() {
let foodList = this.$refs.foodList // 获取food列表的DOM
let height = 0
this.listHeight.push(height)
for(let i = 0; i < foodList.length; i++) {
let item = foodList[i]
height += item.clientHeight // 获取可视区域店高度
this.listHeight.push(height)
}
},
// 4.menu滚动到制定位置
_followScroll(index) {
let menuList = this.$refs.menuList
let el = menuList[index]
this.menuScroll.scrollToElement(el, 300, 0, -100)
}
}
}
</script>

<style lang="stylus" rel="stylesheet/stylus">
@import "../../common/stylus/mixin.styl"
*{margin: 0; padding: 0}
.goods
position absolute
display flex
width 100%
top 174px
bottom 46px
overflow hidden
.menu-wrapper
flex 0 0 80px
width 80px
background #f3f5f7
.menu-item
display table
width 56px
height 54px
line-height 12px
padding 0 12px
&.current
position relative
margin-top -1px
z-index 10
background #fff
font-weight 700
.text
border-none()
.icon
display inline-block
width 12px
height 12px
background-size 12px 12px
background-repeat no-repeat
vertical-align top
padding-right 2px
&:last-child
margin 0
&.decrease
bg-image('decrease_3')
&.discount
bg-image('discount_3')
&.special
bg-image('special_3')
&.invoice
bg-image('invoice_3')
&.guarantee
bg-image('guarantee_3')
.text
display table-cell
width 56px
font-size 12px
line-height 14px
vertical-align middle
border-1px(rgba(7, 17, 27, 0.1))
.food-wrapper
flex 1
font-size 0
.title
font-size 12px
height 26px
line-height 26px
color rgb(147,153,159)
background #f3f5f7
border-left 2px solid #d9dde1
padding-left 14px
.food-item
display flex
margin 18px 0 0 18px
border-1px(rgba(7, 17, 27, 0.1))
padding-bottom 18px
&:last-child
border-none()
margin-bottom 0
.icon
flex 0 0 57px
margin-right 10px
.content
flex 1
.name
font-size 14px
color rgb(7,17,27)
line-height 10px
.desc, .extra
font-size 10px
color rgb(147,153,159)
margin 8px 0
.desc
line-height 14px
.extra
line-height 10px
.price
.now
font-size 14px
font-weight 700
line-height 24px
color #f01414
.oldPrice
font-size 10px
color rgb(147,153,159)
font-weight 700
line-height 24px
margin-left 8px

</style>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容