当前位置: 首页 > news >正文

北京朝阳区网站建设公司做百度移动端网站优

北京朝阳区网站建设公司,做百度移动端网站优,织梦源码模板下载商城网站模板 整站带栏目高端大气上档次含数据,龙华附近网站建设前言 为了满足手机上菜单栏随用户移动,菜单的自动展示与隐藏,特此记录 基本原理 实现逻辑 window.addEventListener(‘scroll’, debouncedScrollHandler) – 监听文档视图滚动事件 document.querySelector(‘.header’) – 选择器匹配元素 创建show和h…

前言

为了满足手机上菜单栏随用户移动,菜单的自动展示与隐藏,特此记录


基本原理

在这里插入图片描述

实现逻辑

window.addEventListener(‘scroll’, debouncedScrollHandler) – 监听文档视图滚动事件

document.querySelector(‘.header’) – 选择器匹配元素
创建show和hidden样式,控制展示和隐藏

具体实现

  1. 监听滚动事件
    在这里插入图片描述
  2. 滚动修改逻辑

首先通过选择器选取菜单
监听当前移动高度 scrollTop (下移为负,上移为正)
为了让展示更加丝滑,当移动距离大于菜单栏高度时,修改状态Math.abs(height) > divHeight
判断状态,有三种情况

  1. 当第一次进入页面时,下滑隐藏菜单
  2. 当菜单隐藏时,上滑展示菜单
  3. 当菜单展示时,下滑隐藏菜单
// 滚轮时间 (根据上滑,下滑状态判断是展示还是隐藏)scroll () {const headerDiv = document.querySelector('.header')if (headerDiv) {const scrollTop = document.documentElement.scrollTop// 移动高度 (下移为负,上移为正)// 当上移,下移超过一个导航栏高度时,进行展示修改const height = this.lastScrollTop - scrollTopconst divHeight = headerDiv.clientHeight + 10 // 菜单高度(尽量给足余量)const hasHidden = headerDiv.classList.contains('hidden')const hasShow = headerDiv.classList.contains('show')if (!hasHidden && !hasShow) {if (height < 0 && Math.abs(height) > divHeight) {headerDiv.classList.add('hidden')}} else if (hasHidden) {if (height > 0 && Math.abs(height) > divHeight) {headerDiv.classList.remove('hidden')headerDiv.classList.add('show')}} else if (hasShow) {if (height < 0 && Math.abs(height) > divHeight) {headerDiv.classList.remove('show')headerDiv.classList.add('hidden')}}this.lastScrollTop = scrollTop}},

这个状态变化是按用户使用逻辑判断的,实际上可以精简为两种,
上滑 - 展示菜单
下滑 - 隐藏菜单

if (height > 0 && Math.abs(height) > divHeight) {hasHidden && headerDiv.classList.remove('hidden')!hasShow && headerDiv.classList.add('show')} else if (height < 0 && Math.abs(height) > divHeight) {!hasHidden && headerDiv.classList.add('hidden')hasShow && headerDiv.classList.remove('show')}

其他知识

这样我们已经完成了菜单的展示和隐藏,但是还可以通过一些优化让他展示的更为丝滑

  1. 动画设置 – 在样式里使用动画,达到缓慢展开和收起的效果
.hidden {animation: menu-disable 1s;transform: translateY(-30px);
}.show {animation: menu-show 1s;
}@keyframes menu-disable {0% {transform: none;}100% {transform: translateY(-30px);}
}@keyframes menu-show {0% {transform: translateY(-30px);}100% {transform: none;}
}
  1. 防抖监听

因为scroll会实时监听状态的改变,所以用户每移动一次屏幕,就是调用一次scroll方法,就可能修改一次状态,所以使用上就有一种抖动的感觉.(不过使用上面的高度判断逻辑后,不会那么明显)


在使用sroll方法的时候,套一个防抖函数,就可以解决此问题

 // 定义一个防抖函数debounce (func, wait) {let timeout;return function () {const context = this, args = arguments;clearTimeout(timeout);timeout = setTimeout(() => func.apply(context, args), wait);};},
http://www.yayakq.cn/news/827753/

相关文章:

  • 一个空间两个网站对seo招工信息网
  • 免费建站建设网站网站建设问卷
  • wordpress网站 800cdnseo培训机构排名
  • 中英文网站建设企业唐山做网站价格
  • 制作网站开发项目的方案书贸易公司寮步网站建设极致发烧
  • 自建站网站哈尔滨企业建站服务商
  • 在库言库建筑网站seo技巧是什么意思
  • 网站后台jsp怎么做分页高端网站建设方案范文
  • 高校建设人事处网站的意义网站运维平台建设原则
  • 自建站外贸平台有哪些比较好阜阳网站制作公司去哪找
  • 网站建设明薇通网络价格美丽wordpress基本教程
  • 个人网站的设计与实现六安有哪些做网站的公司
  • 栖霞网站设计东莞正规的企业网站设计多少钱
  • 商贸网站源码咨询公司网站模板
  • 深圳html5网站开发搜索引擎大全网址
  • 网站建设预算明细手机网站的页面大小
  • 上海建筑网站设计加强纪检监察网站建设
  • 商城网站制作需要多少费用网站互联网接入商
  • 株洲建设网站制作硅云wordpress多站点
  • 公司网站规划科技公司简介范文
  • 做一家仓储用地的网站河北住房与建设信息网站
  • 手机网站建设怎么样上传网站空间的建站程序怎么删除
  • 唐山做网站的电话wordpress wplang
  • 网站建设亿金手指花总12台州外贸网站
  • 廊坊网站建设招聘手机推广app
  • 网站建设费用一年平原网站建设电话
  • 如何建设淘客网站秀米h5页面怎么制作
  • 做现货需要关注的网站好孩子官方网站王建设
  • 网站建设要经历哪些步骤?特色的重庆网站推广
  • 怎样制作自己网站制作网站的设计难点