卖座网站影院界面:优化长列表的滑动流畅度方案

news2024/9/23 9:25:02

关键点1:优化长列表的滑动流畅度

问题:在长列表中,向下滑动时,为了提高用户的使用感受,这个滑动一般都会做的很流畅。但是在网速不快的情况下,它自然会卡顿,所以为了优化网速慢带来的卡顿现象,提供了一种办法。

图示:长列表滑动:

 

解决办法:

betterScroll工具:

  • 这个工具主要完成的功能是可以实现页面中的拖动滚动拉动属性等功能;
  • 使用方法参考地址:https://ustbhuangyi.github.io/better-scroll/doc/zh-hans/

使用方法:

(1)给列表ul标签外面加上div盒子,添加class属性,给出盒子高度和溢出隐藏属性

原因是:使用这个 betterScroll工具 必须要有自己的高度,自己盒子的滚动条,而不是靠内容撑开的滚动条,这样这个盒子才能在我们的控制范围之内,浏览器撑开的滚动条我们也控制不了;

注意:

  • 一定要设置盒子高度;盒子高度的设置,可以通过整个页面的高度减去下面电影列的高度,就可以了。这样设置盒子的高度好处是能够适应每一个移动端的尺寸。
  • 要设置溢出隐藏:这个隐藏隐藏的是ul的数据,ul数据撑开的高度是22649px高,因为盒子有高度,然后溢出隐藏显示,就可以控制整个滚动。

关于盒子的高度计算问题:(重点之一)

盒子的高度=页面的高度-底部电影选项卡的高度

误区:不能直接用rem计算,即页面高度667px-电影高度50px,然后再换算成rem,图示:

不能按照上面计算的原因是:我们是按照width宽度来衡量rem的,用在高度上就会出问题;

新的计算方法:动态计算高度

页面高度 = document.documentElement.clientHeight

电影高度 = document.querySelector('footer').offsetHeight:通过获取节点来获取这个高度,footer标签是电影,影院,我的外面包裹的标签

代码:

 给div标签动态添加高度属性,高度初始值为0px,然后再mounted里动态计算高度。

图示:ul数据高度:

 代码:

<div class="box">
            <ul>
                <li v-for="data in cinemaList" :key="data.cinemaId">
                    <div class="left">
                        <div style="font-size:15px;" class="cinema-text">{{data.name}}</div>
                        <div style="color: #797d82; margin-top:5px; font-size:12px;" class="cinema-text">{{data.address}}</div>
                    </div>
                    <div class="right">
                        <div style="color:orange; font-size:15px; text-align:center;">¥{{data.lowPrice/100}}起</div>
                        <div style="font-size:11px; color:#797d82; margin-top:5px; text-align:right;">距离未知</div>
                    </div>
                </li>
            </ul>
</div>

<style>
.box{
        height: 300px;
        overflow: hidden;
}
</style>

(2) 下载这个模块、引入模块

下载模块:(先用上面这个下载,出错了再用第二个下载)

npm install --save better-scroll

或者 

npm install --save better-scroll --legacy-peer-deps

引入模块:

import BetterScroll from 'better-scroll'

(3)初始化:

new BetterScroll('.box')
  •  注意:要在列表渲染完再初始化,不然会出现初始化过早的问题,

所以可在 this.$nextTick 里面初始化,见代码:

mounted () {
    http({
      url: '/gateway?cityId=310100&ticketFlag=1&k=1342451',
      headers: {
        'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"16661470114057618813288449","bc":"310100"}',
        'X-Host': 'mall.film-ticket.cinema.list'
      }
    }).then(res => {
    //   console.log(res.data.data.cinemas)
      this.cinemaList = res.data.data.cinemas

      this.$nextTick(() => {
        //   初始化,要等li标签都渲染完毕了,才可初始化
        new BetterScroll('.box')
      })
    })
  }

效果:向下拉或者向上拉有惯性效果

图示:

原理是:在拉动的过程中给ul标签加上了动画,用的是c3的知识,用上c3可以调用起来GPU充分发挥出显卡的性质来,c3中的transform能利用好事物渲染的引擎,至少CPU被合理使用上去,这样用户体验会有很大的提高。

图示:看右边ul标签里的transform属性:

加上滚动条: 

  • 上面的效果,发现没有滚动条出现,那就会不清楚当前滚动到哪里了,如何加滚动条:

 (1)初始化时,传第二个参数,是一个对象{},属性scrollbar

new BetterScroll('.box', {
          // 出现滚动条
          scrollbar: {
            fade: true
          }
        })

(2)给box属性增加 相对定位

.box{
        height: 300px;
        overflow: hidden;
        // 限制滚动条的位置
        position:relative;
    }
  • 如果不加相对定位,滚动条就会超出盒子滚动,不会相对于box盒子滚动,所以要加上,而且只能加相对定位;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好用的国产远程控制软件,我只推荐这款!

近年来&#xff0c;越来越多的人需要远程办公&#xff0c;远程为用户提供服务或支持等&#xff0c;导致人们对远程控制软件的需求不断增加。 但现在市面上远程控制软件参差不齐&#xff0c;有的远程控制软件功能不齐全&#xff0c;有的操作步骤过于繁琐&#xff0c;有的使用起…

vue 组件封装——可自由拖拽移动的盒子

最终效果 完整代码 关键性要点&#xff0c;详见注释 组件封装 superBox.vue <template><divref"box_Ref"class"box"mousedown"moveStart"mousemove"moving"mouseup"moveEnd":style"{width: (nodeInfo.width…

js模块化

第1章:模块化入门 1.1.理解什么是模块 将一个复杂的程序依据一定的规则拆分成单个文件&#xff0c;并最终组合在一起这些拆分的文件就是模块&#xff0c;模块内部数据是私有的&#xff0c;只是向外部暴露一些方法与外部其它模块通信 1.2.为什么要模块化? 降低复杂度&#…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java网络游戏虚拟交易平台8rfnp

计算机毕业设计的编程真的不会, 应该怎么办啊, 平时学了3年都没学懂&#xff0c;然而还有一个月就要答辩了&#xff0c;一点东西都没做出来&#xff0c;不知道该怎么办了&#xff1f;好迷茫&#xff0c;如果毕不到业怎么办, 有没有快速的学习方法 毕设毕设&#xff0c;最终的是…

【软件测试】10年测试老鸟,告诉你测试内功修炼之道......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 一名测试人员&#…

Docker[2]-docker的组成与卸载

1.5 Docker的基本组成 1.5.1 镜像(image) Docker 镜像&#xff08;Image&#xff09;就是一个只读的模板。镜像可以用来创建 Docker 容器&#xff0c;一个镜像可以创建很多容器。 docker面向对象容器对象镜像类 1.5.2 容器(container) Docker 利用容器&#xff08;Container&a…

一文读懂如何让网页变灰白色(黑白色)

文章目录1. 文章引言2. 实现方法2.1 修改CSS文件2.2 修改html标签2.3 修改body标签2.4 使用grayscale.js插件1. 文章引言 有段时间&#xff0c;我们打开知名的网页&#xff0c;发现全部变成黑白色了&#xff0c;如下图所示&#xff1a; 一般在清明节&#xff0c;全国哀悼日&am…

学会这些C语言技巧,你的编程能力大大提升

一、函数指针 在讲回调函数之前&#xff0c;我们需要了解函数指针。 我们都知道&#xff0c;C语言的灵魂是指针&#xff0c;我们经常使用整型指针&#xff0c;字符串指针&#xff0c;结构体指针等 int *p1; char *p2; STRUCT *p3; //STRUCT为我们定义的结构体 但是好像我们…

PCB设计总有几个阻抗没法连续的地方。

罗永浩所说“人生总有几次踩到大便的时候”&#xff0c;PCB设计也总有阻抗不能连续的时候。 特性阻抗&#xff1a;又称“特征阻抗”&#xff0c;它不是直流电阻&#xff0c;属于长线传输中的概念。在高频范围内&#xff0c;信号传输过程中&#xff0c;信号沿到达的地方&#xf…

canal springboot 入门

Alibaba canal(官方文档链接) 简介 canal [kə’nl]&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署&#xff0c;存在跨机房同步的业务需求&#xff0c;实现方…

转行编程语言该怎么选择?小扎给你安排上

编程语言的发展 ​ 编程语言到目前为止&#xff0c;经历了三个发展阶段&#xff0c;机器语言&#xff0c;汇编语言、高级语言。在高级语言中&#xff0c;又可以分为面向过程语言以及目前最为广泛流传的面向对象语言。 机器语言 ​ 第一代计算机语言称为机器语言。机器语言就是…

stm32cubemx hal学习记录:FreeRTOS中断管理

一、参数配置 1、配置RCC、USART1、时钟84M 2、配置SYS&#xff0c;将Timebase Source修改为除滴答定时器外的其他定时器。 3、初始化LED的两个引脚、两个按键引脚 4、开启FreeRTOS&#xff0c;v1与v2版本不同&#xff0c;一般选用v1即可 5、创建一个队列 6、创建两个线程…

正大国际期货:外盘黄金期货怎么做,需要注意什么?

无论你是刚入外盘黄金期货市场的新手小白&#xff0c;还是已经入黄金市场多年的老手&#xff0c;必须知道外盘黄金期货交易的技巧及规则&#xff0c;这样才可以在黄金期货市场中站稳脚跟&#xff0c;才能收获更多的利益。下面正大IxxxuanI就为大家准备了一些黄金交易技巧以供参…

太阳能发电与蓄电池研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

汇编语言程序设计入门

目录 基本概念 符号指令中的表达式 符号 数值常量 符号常量&#xff08;用的很少&#xff09; 数值表达式 标号&#xff08;一般出现在代码段&#xff09; 程序框架 ​编辑 标号的定义 变量&#xff08;最重要) 变量的属性​编辑 变量存储区中数据的存放​编辑 变量…

最受欢迎的Python科学类库

作为一种免费的&#xff0c;跨平台的&#xff0c;通用的和高级的编程语言&#xff0c;Python已被科学界广泛采用。科学家重视Python的精确和有效的语法&#xff0c;相对平坦的学习曲线以及它与其他语言&#xff08;例如C / C &#xff09;很好地集成的事实。 由于这种流行&…

最近沉迷Redis网络模型,无法自拔!终于知道Redis为啥这么快了

1. 用户空间和内核态空间 1.1 为什么要区分用户和内核 服务器大多都采用 Linux 系统&#xff0c;这里我们以 Linux 为例来讲解: ubuntu 和 Centos 都是 Linux 的发行版&#xff0c;发行版可以看成对 linux 包了一层壳&#xff0c;任何 Linux 发行版&#xff0c;其系统内核都…

设计模式-day03

5&#xff0c;结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“…

项目管理(如何进行项目风险管理)

项目风险管理包括规划风险管理、识别风险、开展风险分析、规划风险应对、实施风险应对和监 督风险的各个过程。项目风险管理的目标在于提高正面风险的概率和(或)影响,降低负面风险的 概率和(或)影响,从而提高项目成功的可能性。 项目风险分类: 1、概率性风险(能识别并确…

【虹科】工业相机如何自动优化图像?

普通的消费网络相机操作简便&#xff0c;常常也会用于一些机器视觉应用。然而&#xff0c;我们很容易就可以意识到&#xff0c;与典型的工业相机相比&#xff0c;虽然网络相机价格诱人&#xff0c;但是在质量、耐用性和长期可用性方面存在显著劣势。和网络相机一样简单易用的工…