初试 vue2.0——9.项目开发_better-scroll 实现移动端滑动2

写在前面的话:

  上一篇文章实现了滑动效果,这部分来试试左右联动效果的实现方法吧

九、better-scroll + vue2.0 实现移动端滑动2——左右联动

  效果:滑动右侧时,左侧也能有相应的变化;点击左侧时,右侧也能自动定位到相应的位置。

如下图所示界面,左侧为分栏,右侧为分栏详情。

    

  滑动右边使左边联动的大概的思路:

      1)要知道右侧的列表中,每一个分栏所占的高度,存进一个数组中。

      2)实现左边联动,则必须要监控 “scroll”事件,获取其高度

      3)将scroll 的高度与右侧分栏的高度进行比较,获得其 index 值

      4)左侧的分类中,使与 index 相应的分栏高亮即可~

    余留的问题:额,左侧怎么跟着一起滚动?应该还需要判断一下当前左侧栏中的scroll的位置,然后使之跟随变化,但是不同尺寸的手机,高度不一,怎么解决???我不知道……

  点击左边时,右边实现自动定位的大概思路:

      1)首先要使点击有效,因为 better-scroll将默认事件都阻止了

      2)为左侧的分栏绑定点击事件,并获取 index ,然后使右边的相应 index 分类滚动就行了~so easy   ....but!!!

   怎么下手?!!

1. 先实现滑动右边触发左边的功能:

做法:

  (1)定义变量先~ 在data中加入一个 listHight: [] 数组;一个变量scrollY : 0,用来装目前的scroll的y位置坐标

  (2)在methods 中定义一个函数计算高度,此处还要用到一个知识点(如何获取 分类列表dom元素?)还记得上一篇中使用到的 this.$refs 吗?

    我们先给要获取高度的那个元素取个类名,名字叫:“food-list-hook”:

    let foodList = this.$refs.foodsWrapper.getElementsByClassName(‘food-list-hook‘)   这样就获取了所有分类列表啦,计算方法定义如下:

_calculateHeight () {
        // console.log(this)
        let foodList = this.$refs.foodsWrapper.getElementsByClassName(‘food-list-hook‘)
        let height = 0
        this.listHight.push(height)
        for (let i = 0; i < foodList.length; i++) {
          let item = foodList[i]
          height += item.clientHeight
          this.listHight.push(height)
        }
}

   (3)然后在计算属性computed 中,来比较数组中的高度值与当前的 scroll 的y坐标值,返回的是当前所在高度的index值:

在执行这一步时,scrollY的值,要怎么得到?(通过better-scroll 检测“scroll”事件得到,此时,需要给其加上相应的参数,做法如截图中画红线处所示)

    

currentIndex () {
        for (let i = 0; i < this.listHight.length; i++) {
          let height1 = this.listHight[i]
          let height2 = this.listHight[i + 1]
          if (!height2 || (this.scrollY >= height1 && this.scrollY < height2)) {
            return i
          }
        }
        return 0
      }
 }  

  (4)在 template 中,将此index 值绑定到index 值相等的左侧的列表分栏中,并指定一个类名,叫 current,如下图中的 画红线的部分:

     

  (5)在style中,将相应的current 类加上相应的样式即可:

    

2. 再来实现点击左边,右边联动的效果

  (1)使 左边栏 点击有效,如下图红线标注所示:

    

  (2)为左侧栏 添加相应的点击事件:

    

  (3)在methods 中编写点击触发的事件 selectMenu()方法,利用 获取的 $index 使右边进行相应的滚动,其中 300ms是加上了一个过渡效果:

    

试试吧~

时间: 2024-10-14 20:01:31

初试 vue2.0——9.项目开发_better-scroll 实现移动端滑动2的相关文章

初试 vue2.0——5.项目开发_css sticky footers布局

写在前面的话: 在 w3cplus 上可以看到相关学习资料,本文就是参考了这篇,写下的笔记~,原文 链接 五.css sticky footers布局 一般来说,常会遇到这样的布局:在一个页面的内容不确定的情况下,始终得实现 footer 部分位于页面的底部~ 实现这种布局的方式有很多,据说css sticky footers 是一种兼容性最好的一种布局方式~ 然而最好的方式是:flex 布局~~~ 好用的写在前面,参考原文 1 <!DOCTYPE html> 2 <head> 3

初试 vue2.0——3.项目开发之布局说明

写在前面的话: 不说了,上手吧~! 三.布局说明 其实都是按照设计稿来的,但是与之前的静态页面不同的是,这里的页面数据,凡是可以变更的,都是在后台数据中得到的,所以这里很有必要  把代码贴出来(原理嘛,唉,目前我自己也不太明白,还是不要误导大家了~) 上一篇说道,header.vue中要用到 app.vue的数据时,需要做的,这里就不重复了. 强调一下以下问题,不分先后顺序: 1)出现在文中的内容处:<span>{{ seller.xxx}} </span> 2)被绑定在某个元素的

百度地图V2.0实践项目开发工具类bmap.util.js V1.4

/** * 百度地图使用工具类-v2.0(大眾版) * * @author boonya * @date 2013-7-7 * @address Chengdu,Sichuan,China * @email [email protected] * @company KWT.Shenzhen.Inc.com * @notice 有些功能需要加入外部JS库才能使用,另外还需要申请地图JS key . * 申请地址:http://developer.baidu.com/map/apply-key.ht

Vue2.0 全家桶开发的网页应用(参照吾记APP)

github链接 借鉴吾记APP,使用 vue2.0+vue-router+vuex 为主要技术栈,elementui做为ui框架,多模块 spa 模式,webpack2.0 负责模块打包,gulp 负责处理静态资源打包.压缩,欢迎打赏star!!! 安利一下 吾记前端构建流程 本地环境准备 安装node: * https://nodejs.org/en/download/ ("node": ">=6.0",对应需要升级node-sass,不然使用不了!) 配

Vue2.0 实战项目(一) ——安装vue.cli

1.打开Vue脚手架的github地址:https://github.com/vuejs/vue-cli,在README查看如何安装 2.通过npm安装vue $ npm install -g vue-cli 3.通过webpack安装 $ vue init webpack myProjectName 4.切换到创建的项目目录,然后安装依赖文件 npm install

Vue2.0 实战项目(四) Vue-router

Vue-router 本次实战项目所使用的Vue-router版本是2.3.1 首先在main.js中引入Vue-router, import Vue from 'vue'; import Router from 'vue-router'; //如果在一个模块化工程中使用它,必须要通过 Vue.use() 明确地安装路由功能: //如果使用全局的 script 标签,则无须如此(手动安装). Vue.use(Router); //定义路由 const routes = [ {path: '/go

Vue2.0 实战项目(五) 组件间通信的方法

Vue组件之间通信分为三种情况:父组件向子组件通信.子组件向父组件通信.兄弟组件间通信. 一.父组件向子组件通信 通过props可以将值传递给子组件 <!-- 父组件 --><template> <div id="app"> <!-- 父子组件间通信 --> <child :message="toChildMsg"></child> </div> </template>

Vue2.0 实战项目(二) 分析Vue如何运行

项目创建成功后在浏览器中打开项目. 进入页面首先加载index.html和main.js文件.. main.js文件中给id="app"的div创建一个Vue的实例,该实例中有一个名叫"APP"的组件,该组件通过vue-router将Hello.vue中的模板注入到App.vue的模板中. index.html main.js App.vue router文件夹下的index.js 最后就是Hello.vue

带你入门Vue2.0及案例开发 开发数字产品电商平台+源码

课程目录: 第1章 课程简介 讲解课程安排,面象人群,以及对课程的项目做了效果演示. 第2章 Vue简介 对vue一些最基础的知识做了讲解:实例对象.vue组件以及vue的一些相关概念. 第3章 功能接口(1) 对文本渲染v-html.v-text.列表渲染 v-for 数组,对象,子组件:列表数据的同步更新方法:vue标签属性和条件渲染:事件绑定-内置事件绑定.自定义事件绑定:表单事件绑定:计算属性和数据监听等进行了讲解. 第4章 功能接口(2) 对组件之间通信:过渡动画:css实现过渡动画: