1.配置路由

先在router文件夹中,创建一个路由。引入组件

{
path: '/city',
name: 'HelloCity',
component: city,
meta: {
name: 'viewport',
content: 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0'
}

2.点击页面跳转

<router-link to="/city">
<div class="right">
{{city}}
<icon-svg icon-class="iconnewPPdaosanjiao" />
</div>
</router-link>

3.引入更高级区块滚动 better-scroll

npm install better-scroll -S

<div class="wrapper">
<ul class="content">
<li>...</li>
<li>...</li>
...
</ul>
<!-- you can put some other DOMs here, it won't affect the scrolling
</div> import BScroll from '@better-scroll/core'
let wrapper = document.querySelector('.wrapper')
let scroll = new BScroll(wrapper)

4.如果是循环中的ref 赋值的name  那么拿到这个ref的元素 需要用 this.$refs[name][0]

循环产生的ref this.$refs获得的不是一个标准dom元素 而是一个数组

5. 复杂列表布局

要做到一个吸顶效果 并且有弹性上下拉动

// list元素 上设置绝对定位
position:absolute;
top: 0
right 0
left 0
bottom 0
//相对于body 上下左右距离都是0
//然后
overflow: hidden
超出部分就隐藏
就造成无法拉动 吸顶 就top设置距离
//然后解决 页面固定了 如何拉动
//引入 better-scroll
import BScroll from '@better-scroll/core'
let wrapper = document.querySelector('.wrapper')
let scroll = new BScroll(wrapper)
 

6.兄弟组件的联动

//借助ref  和 better-scroll
//实现指定元素的跳转
//1.
this.scroll.scrollToElement(dom)
//其中this.scroll 是我们在mounted中注册过的
mounted () {
this.scroll = new BScroll(this.$refs.bscroll)
},
// 2。ref
var element = this.$refs[this.clickList][0]
//注意:⚠️循环得到的ref 是一个数组 需要加【0】

7.字母表的滑动影响页面跳转(兄弟组件的联动)

//用到三个移动端绑定时间函数
@touchstart="touchstart"
@touchmove="touchmove"
@touchend="touchend"
//希望只有在touchstart之后才可以出发touchmove里面的内容
//data里面定义一个 标示 。默认为false
data () {
return {
active: false
}
},
//然后method中定义
touchstart () {
this.active = true
},
touchmove (e) {
if (this.active) {
console.log(e.target)
var scrollY = Math.floor((e.touches[0].clientY - 98 - 82) / 15)
var element = this.cities2[scrollY]
this.$emit('change1', element)
}
},
touchend () {
this.active = false
}
//

其中需要重点关注的知识点

滑动时间event.touches[0].clientY 当前触发时间的元素离顶部的距离

//我们用的方法为计算alphabet的单个字母长度。然后计算滑动的距离。除以字母长度,就知道滑到第几个

//期间还用到watch (为对象,需要监听的是数据对象格式,数据需要已经存在data)

//也有缓存性能  监听数据不改变 它不作用

// computed 其他和watch一样 就是数据不用定义data   一般数据计算都可以放在这里  计算结果需要返回

//计算属性 内置缓存

//当计算属性计算出的结果 依赖的数据不发生改变的情况
计算属性不多余计算,可以提高性能//就算页面重新渲染

8.列表切换性能优化

//函数中有计算固定值的 并且该函数频繁被执行  那么这个计算就多余

// updated  一般有数据变动 放在这个生命周期函数中

因为页面刚加载 通过父组件传过来数据ajax还没有拿到

当传给子组件的数据改变的时候  子组件就会重新渲染 这个时候updated就会被执行

这个时候子组件就完全动态渲染好 这个时候拿数据 就是最新的  而且不溶于

!!要数据一定在拿到ajax数据后再拿

8.2 节流

move移动的频率比较高 我们需要做一个节流

//data中设定一个 timer:null
//然后move时间函数中
if(this.timer) {
clearTimeout(this.timer)
}else {
this.timer = setTimeout(()=>{要做的事情},16)

//延迟16ms  如果16ms中还有滑动 就清除上次

//大大减少move 事件执行频率提高性能

part5 城市页面列表开发的更多相关文章

  1. 八、VueJs 填坑日记之参数传递及内容页面的开发

    我们在上一篇博文中,渲染出来了一个列表,并在列表中使用了router-link标签,标签内的:to就是链接地址,昨天咱们是<router-link :to="'/content/' + ...

  2. WEB开发框架系列教程 (三)页面功能开发(2)

    上一节介绍了,基础资料币别信息的开发,只通过辅助开发工具,创建及资料表,填写 表名,程序就完全好了. 最后也说到,可能我们也会面对另外一些基础资料信息的维护,但是不是简单到只有代码 和名称,可能还有另 ...

  3. 天气预报API(一):全国城市代码列表(“旧编码”)

    说明 2016-12-09 补充 (后来)偶然发现中国天气网已经有城市ID列表的网页... 还发现城市编码有两种,暂且称中国天气网这些编码为旧标准 "旧编码"的特征是 9个字符长度 ...

  4. iOS:城市级联列表的使用

    1.介绍: 现在越来越多的项目都用到了地址,尤其是电商O2O的购物平台,我之前做的教育产品和电商产品都用到了,而实现地址的设置用到的技术就是城市级联列表,即普遍的做法就是自定义选择器控件UIPicke ...

  5. 项目Splash页面的开发与设计

    项目Splash页面的开发与设计 首先建立一个安卓的项目,然后修改manifest.xml文件,修改应用程序的logo和显示名称,效果图如下: 对应的代码如下: 1 <?xml version= ...

  6. 使用webpack、babel、react、antdesign配置单页面应用开发环境

    这是Webpack+React系列配置过程记录的第一篇.其他内容请参考: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-rout ...

  7. 关闭open页面时刷新父页面列表

    var winObjEI = window.open("/Invoice/InvoiceViewEI?invoiceid=" + data.InvoiceId); ; //关闭op ...

  8. H5类似易企秀/编辑器/页面制作/开发/生成工具/软件/源码/授权

    代码地址如下:http://www.demodashi.com/demo/14960.html 项目简介 H5DS (HTML5 Design software) 这是一款基于WEB的 H5制作工具. ...

  9. 【vue】饿了么项目-页面骨架开发

    1.页面骨架开发 1.1组件拆分 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没 ...

随机推荐

  1. is application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem

    最近试着了解 c++,接触到了QT,写了一个测试程序,在开发环境下正常后移到非开发环境,报错 网上找资料说是少了platforms文件夹中的dll,把里面所有的dll复制到执行程序目录,还是提示,继续 ...

  2. Day6-T1

    原题目 Describe:模拟大水题 code: #include<bits/stdc++.h> #define INF 214748364 #define eps 1e-9 #defin ...

  3. ThinkPhp3.2.3缓存漏洞复现以及修复建议

    小编作为一个php(拍黄片)的程序员,今天早上无意间看到thinkphp的缓存漏洞,小编在实际开发过程中用thinkphp3.2.3挺多的. 我们这里来复现一下漏洞 后面我会提出修复建议 首先我们下载 ...

  4. Day7 - D - The Euler function HDU - 2824

    The Euler function phi is an important kind of function in number theory, (n) represents the amount ...

  5. 记一次 springboot 参数解析 bug调试 HandlerMethodArgumentResolver

    情况描述 前端输入框输入中文的横线 -- ,到后台接收时变成了 &madsh;$mdash 正常应该显示成这样: bug调试思路记录 最开始完全没有向调试源码方面想,试了不少方法,都没解决,没 ...

  6. C++连接sqlite数据库的坑

    新的第一次用vs2013搞 C++连接sqlite数据库,遇到了很多问题,我也不搞不懂~~~下面写点小体会 首先: 你要先配置好sqlite的环境 参考链接: https://blog.csdn.ne ...

  7. 数据库建模工具pd的使用

  8. 使用 HTML5 视频事件

    转自:http://msdn.microsoft.com/zh-cn/library/hh924822(v=vs.85).aspx 为什么要使用事件? HTML5 视频对象提供了很多事件,这些事件可以 ...

  9. 京东云与AI 10 篇论文被AAAI 2020 收录,京东科技实力亮相世界舞台

    美国时间2月7-12日,AAAI 2020大会在纽约正式拉开序幕,AAAI作为全球人工智能领域的顶级学术会议,每年评审并收录来自全球最顶尖的学术论文,这些学术研究引领着技术的趋势和未来.京东云与AI在 ...

  10. Redis 详解 (七) AOF 持久化

    目录 1.AOF简介 2.AOF 配置 3.开启 AOF 4.AOF 文件恢复 5. AOF 重写 6.AOF的优缺点 上一篇文章我们介绍了Redis的RDB持久化,RDB 持久化存在一个缺点是一定时 ...