先学习这篇文章
顶部吸顶的效果查看

效果1:

效果2:

<template><div><header class="header" ref='header'>高度250</header><ul class="nav" :class="{isFixed:isFixed}" ref="nav"><li class="item" v-for="(item,index) in new Array(4)" :key="index" @click="selectItem(index)":class="{'current':currentIndex===index}">{{index+1}},高度50</li></ul><div class="fakeNavHeight" v-if="isFixed"></div><ul class="content"><li class="tips" ref="foodList" v-for="(item,index) in new Array(4)" :key="index">{{index+1}}</li></ul></div>
</template>
<script>
var throttle = require('lodash/throttle'); //从lodash中引入的throttle节流函数
export default {name: 'stickUp',data() {return {listHeight: [],// currentIndex: 0,isFixed: false, //是否固定的throttleScroll: null, //定义一个截流函数的变量,scrollTop: 0, //页面实时滚动的距离headerHeight: '', //header部分的高度,navHeight: '', //nav部分的高度,};},computed: {currentIndex() {console.info('scrollTop', this.scrollTop, 'headerHeight', this.headerHeight, 'navHeight', this.navHeight);for (let i = 0; i < this.listHeight.length; i++) {let height1 = this.listHeight[i];let height2 = this.listHeight[i + 1];if (this.scrollTop - this.headerHeight >= height1 && this.scrollTop - this.headerHeight < height2) {return i;} else if ($(window).height() + this.scrollTop + 20 >= $(document).height()) {//到达底部还有20px 触发currentIndex选中 , 只针对最后一个元素不满整屏的高度的时候return this.listHeight.length - 2;}}return 0;},},methods: {selectItem(index) {console.info('index', index);//恒定时间var speed = 200; //滑动的速度$('body,html').animate({ scrollTop: this.listHeight[index] + this.headerHeight }, speed);return false;},//滚动的函数handleScroll() {this.headerHeight = $(this.$refs.header).outerHeight(); //header的高度this.scrollTop = $(window).scrollTop(); //滚动的距离的,为什么这里使用的jq,因为不用考虑的什么的兼容问题this.navHeight = $(this.$refs.nav).outerHeight(); //nav的高度//判断是否吸顶效果if (this.scrollTop > this.headerHeight) {this.isFixed = true;} else {this.isFixed = false;}},_calculateHeight() {let foodList = this.$refs.foodList;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);}console.info('每个东西的高度', this.listHeight, '页面总的高度', $(window).height(), $(document).height());},},mounted() {this.$nextTick(() => {//这里使用监听的scroll的事件,为什么要使用的节流函数,如果不使用的,页面一直在滚动计算的,这样在//使用手机时候,出现非常卡的,隔一段时间计算,大大降低了性能的消耗(具体的好处自己去查资料)window.addEventListener('scroll', this.throttleScroll, false);this._calculateHeight();});this.throttleScroll = throttle(this.handleScroll, 100);},destroyed() {//离开页面需要remove这个监听器,不然还是卡到爆。window.removeEventListener('scroll', this.throttleScroll);},
};
</script>
<style lang="scss" scoped>
.header {height: 5rem;width: 100%;background-color: red;
}
.nav {display: flex;height: 1rem;background-color: transparent;line-height: 1rem;text-align: center;width: 100%;&.isFixed {position: fixed;left: 0;top: 0;z-index: 9999;}.item {flex: 1;&.current {background-color: #000;color: #fff;font-weight: 900;}}
}
.fakeNavHeight {height: 1rem;width: 100%;
}
.content {.tips {height: 15rem;width: 100%;&:first-child {background-color: red;}&:nth-child(2) {background-color: pink;}&:nth-child(3) {background-color: yellow;}&:last-child {background-color: blue;height: 6rem;}}
}
</style>

vue实现stickUp的效果相关推荐

  1. 黑马vue---10-11、Vue实现跑马灯效果

    黑马vue---10-11.Vue实现跑马灯效果 一.总结 一句话总结: 1. 给 [浪起来] 按钮,绑定一个点击事件   v-on   @ 2. 在按钮的事件处理函数中,写相关的业务逻辑代码:拿到 ...

  2. php vue联动查询,使用vue.js实现联动效果的示例代码

    摘要:本篇文章主要介绍了使用vue.js实现联动效果的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧想用vue.js写一个联动效果,按照自己的思路实验了下,并没有 ...

  3. Vue实现跑马灯效果以及封装为组件发布

    Vue 实现跑马灯效果 前言 最近做活动需要做跑马灯效果,其他同事也有实现,本来打算复制他们代码,发现都是使用setInterval实现了,也没有封装为组件,所以自己用CSS3实现了一下跑马灯效果,并 ...

  4. vue openlayer 添加风场效果

    vue openlayer 添加风场效果 一个简单的小demo,就是在一个openlayers地图上面添加风场效果. 话不多说,直接进入正题. 首先我们需要安装一个插件. 插件地址:https://w ...

  5. vue广告栏上下滚动效果

    vue广告栏上下滚动效果 html部分 <div class="roll"><img src="xxx.jpg" alt /><u ...

  6. vue实现数字滚动效果

    vue实现数字滚动效果 npm 下载 vue-count-to https://npmmirror.com/package/vue-count-to

  7. Vue实现音乐播放效果(适合小白学习)

    Vue实现音乐播放效果(适合小白学习) 播放器介绍 五个html主要标签 功能介绍 (1)搜索 (2)播放效果: 完整代码: 播放器介绍 总体的效果如图所示,没有加很多css特效,需要美化的小白,可以 ...

  8. 【Vue实用功能】Vue中实现粒子效果 particles.js

    Vue中实现粒子效果 为了提高页面展示效果,登录界面内容比较单一的,粒子效果作为背景经常使用到,vue工程中利用vue-particles可以很简单的实现页面的粒子背景效果 下载particles.j ...

  9. vue做数字滚动效果

    vue实现数字滚动效果 近期在做项目的时候,产品要求实现数字滚动效果如下: 用jquery实现 html: <div class="develop"> <!--滚 ...

最新文章

  1. 如何开发利用计算机字体,如何利用PS来制作水纹特效字体
  2. vscode显示中文乱码问题
  3. 使用cisco pt 6.0模拟NAT,PAT
  4. 2018下半年初级程序员考试时间
  5. 谷歌开源 Embedding Projector 高维数据可视化--转自开源中国
  6. wedo2.0编程模块介绍_wedo2.0课程包
  7. Puppet自动化Nginx+Mongrel负载均衡配置
  8. DrawerLayoutMenu使用详解
  9. 视频拍摄——视点和视角
  10. 常用算法设计技术总结
  11. java linux 读取文件内容_java访问Linux服务器读取文件
  12. MVC、MVP、MVI、MVVM 和 VIPER 设计模式
  13. 如何做好IT战略规划与IT咨询!
  14. 2021年中国债券行业发展趋势分析:发行规模、交易量增长,未来发展潜力较大[图]
  15. 三星30pin引脚_led屏接口定义20PIN-30PIN
  16. [博学谷学习记录] 超强总结,用心分享|陌陌综合案例
  17. Revit启动后,如何把你的命令显示在Revit的Ribbon(工具栏)上?
  18. 【fastadmin 如何根据用户角色 显示/隐藏 自定义按钮】
  19. 第六章 戚继光——孤独的将领 -1
  20. 服务器系统u盘制作工具哪个好,服务器专用U盘装系统制作工具(PC也行)

热门文章

  1. 双飞翼HTML圣杯布局,Web前端:CSS中的圣杯布局与双飞翼布局
  2. itext 生成 PDF(五) 使用外部字体
  3. python实现月食效果实例代码
  4. CCSP注册云安全专家认证课程大纲
  5. 4.2 同步计数器74x163 的实现
  6. 实验楼OS实验一 熟悉实验环境
  7. 虾皮shopee根据ID取商品详情 API 接入
  8. Springmvc集成jfinal微信 微信服务号开发
  9. Android Studio-个推-实现简单聊天(三)
  10. 公务员备考(十六)行测 判断推理