前端,关于一个骚气的页面阅读定位图(菜单)

之前在网上看到一个特别骚气的页面阅读定位菜单,今天给大家分享一下原理,先看效果图:

这是我之前浏览联想官网上看到的一个效果图,觉得相当骚气。然后我把他的背景图扣下来,也做了一个,看看效果。

他的实现思路是:页面上放两个菜单,一个菜单是默认的,在页面的顶部。另一个菜单是默认隐藏的,当页面滚动默认菜单跑到屏幕以外时,这个转盘就会显示出来,并且会根据当前页面滚动阅读到的位置自动进行轮盘切换。当然这时我们也可以通过点击轮盘上的菜单进行快速跳转锚点去到我们想阅读的模块,如下图:

以下上代码:

HTML:

<ul class="fixd-menu" v-show="scrollMenu" :style="'transform:rotate('+MenuRotate+'deg)'"><li v-for="(item,index) in menu":key="item.code"@click="fixedMenu(index)":class="['fixd-menu-item','fixd'+item.code,fixeMenuNow===item.href?'fixd-now':'']"><a :href="'#'+item.href">{{item.title}}</a></li></ul>

css:

@keyframes menurun(){from{left: 0;}to{left: 1rem;}
}
.fixd-menu{position: fixed;top: calc(50% - 2.91rem);left: 1rem;width: 3.28rem;height: 3.28rem;background-image: url(../images/runner.png);background-size: 100%;background-position: center;z-index: 999;transition: all 1s;
}.fixd-menu .fixd-menu-item{font-size: .1rem;color: #fff;width: .95rem;height: .6rem;line-height: .6rem;text-align: center;background-position: center;background-size: 100%;background-repeat: no-repeat;position: absolute;
}
.fixd-menu .fixd-menu-item a{color: #fff;display: block;width: 100%;height: 100%;}.fixd-menu .fixd0{left: 1.15rem;top: .05rem;
}
.fixd-menu .fixd1{left: 1.928rem;top: .287rem;transform: rotate(37deg);
}
.fixd-menu .fixd2{left: 2.39rem;top: .95rem;transform: rotate(72deg);
}
.fixd-menu .fixd3{left: 2.39rem;top: 1.75rem;transform: rotate(109deg);
}
.fixd-menu .fixd4{left: 1.90rem;top: 2.38rem;transform: rotate(144deg);
}
.fixd-menu .fixd5{left: 1.16rem;top: 2.65rem;transform: rotate(180deg);
}
.fixd-menu .fixd6{left: .4rem;top: 2.38rem;transform: rotate(-144deg);
}
.fixd-menu .fixd7{left: -0.05rem;top: 1.73rem;transform: rotate(-109deg);
}
.fixd-menu .fixd8{left: -0.05rem;top: .94rem;transform: rotate(-72deg);
}
.fixd-menu .fixd9{left: .4rem;top: .299rem;transform: rotate(-37deg);
}
.fixd-now{background-image: url(../images/on_bg01.png);}

VueJS:

data:{menu:[{title:'首页',href:'app',code:0},{title:'服务流程',href:'service',code:1},{title:'关于我们',href:'AboutUs',code:2},{title:'我们的优势',href:'Advantages',code:3},{title:'工程案例',href:'Project',code:4},{title:'领导团队',href:'introduction',code:5},{title:'联系我们',href:'Contact',code:6}],DocumentTop:0,//页面上滚动scrollMenu:false,//滚动后显示的菜单fixeMenuNow:'',//当前悬浮菜单的选中MenuRotate:0//悬浮菜单旋转角度
},
methods:{scrolling(){//页面滚动监听this.DocumentTop = document.documentElement.scrollTop ||document.body.scrollTop ||window.pageYOffset;},fixedMenu(index){//转盘点击时轮盘旋转this.fixeMenuNow = window.location.hash.split('#')[1];this.MenuRotate = 0 - (index * 35);},autoScroll(){//页面滑动时转动轮盘var plate = document.getElementsByClassName('plate');/* 思路:(循环板块列表)当页面滚动等于阅读元素的offsetTop时,表示阅读到此位置了,轮盘的转动此时可通过阅读元素的id去菜单数组“menu”中查找 */var that = this;var readID = '';//当前阅读到的板块IDfor(var i=0;i<plate.length;i++){if(that.DocumentTop >= (plate[i].offsetTop-100) && that.DocumentTop < (plate[i].offsetTop + 100)){readID = plate[i].id;that.menu.map(function(item,index,arr){if(readID === item.href){that.MenuRotate = 0 -(item.code * 35)that.fixeMenuNow = item.hrefwindow.location.hash = "#"+item.href}}) }}}
},
mounted(){//页面挂在完成后给window监听滚动事件,并调用/执行我们定义的事件函数。window.addEventListener("scroll",this.scrolling);
},
watch: {//这里监听当记录页面滚动的变量发生改变时,调用相对应的函数DocumentTop(newValue, oldValue) {if(newValue >= 130){this.scrollMenu = truethis.fixeMenuNow = window.location.hash.split('#')[1];this.autoScroll()}if(newValue <= 50){this.scrollMenu = falsewindow.location.hash = "#app";}}},
,beforeDestroy(){//页面销毁时移除窗口滚动监听window.removeEventListener("scroll",this.scrolling)}

以上就是所有实现代码:

1、你可以根据自己的需求设置菜单内容,当然这个menu内容的href值一定要和页面的节点id相对应,因为我们时通过设置锚点来定位页面内容的。

2、css样式设置了多个fixd1、fixd2、fixd3、……,这是因为我们的轮盘格子只有这么多,并不会因为菜单变多而增加背景图片的格子。哈哈!如果你需要更多的菜单,可以让你的ui给你设计出多个背景图,然后根据菜单列表个数来决定你要哪张背景图,这样就可以实现动态背景图了。

3、代码和逻辑执行流程:进入页面,先给window绑定监听滚动事件,把回调函数替换成我们自己定义的函数。此时我们记录页面滚动距离的变量(this.DocumentTop)就有了初始值了。当this.DocumentTop发生了改变,我们vue的监听函数(watch)就会起到作用。

4、监听函数(watch)内的newValue要判断大于130的原因是。默认菜单和顶部的高度,我希望的是当滚动到默认菜单消失时轮盘才显示,如下图:(这里可以根据自己的需求来写)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Goland2023版新UI的debug模式调试框按钮功能说明

一、背景 Jetbrains家的IDE的UI基本都是一样的&#xff0c;debug模式的调试框按钮排列也是一致的&#xff0c;但是在我使用Goland2023版的新UI时&#xff0c;发现调试框的按钮变化还是很大的&#xff0c;有一些按钮被收起来了&#xff0c;如果看之前的博客会发现有一些文中的旧…

JVM学习(五)--方法区

概念&#xff1a; 方法区就是存和类相关的东西&#xff0c;成员方法&#xff0c;方法参数&#xff0c;成员变量&#xff0c;构造方法&#xff0c;类加载器等&#xff0c;逻辑上存在于堆中&#xff0c;但是不同的虚拟机对它的实现不同&#xff0c;oracle的hotsport vm在1.6的时…

iOS脱壳之frida-ios-dump

frida-ios-dump介绍 该工具基于frida提供的强大功能通过注入js实现内存dump然后通过python自动拷贝到电脑生成ipa文件&#xff0c;适合现iOS11版本之后的越狱手机使用。 下载 https://github.com/AloneMonkey/frida-ios-dump环境安装 电脑环境安装 win和Mac 环境一样都是…

sentinel blockHandler不生效

sentinel blockHandler不生效: package org.bc.sentinel.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockException; import org.apache.commons.lang3.RandomUtils; import org.springfram…

Android Ble蓝牙App(七)扫描过滤

Ble蓝牙App&#xff08;七&#xff09;扫描过滤 前言目录正文一、增加菜单二、使用MMKV① 添加依赖② 封装MMKV③ 使用MMKV 三、过滤空设备名四、过滤Mac地址五、过滤RSSI六、源码 前言 在上一篇文章中了解了MTU的相关知识以及对于设备操作信息的展示&#xff0c;本篇文章中将增…

手游联运平台都具备哪些功能?

手游联运平台是为了方便游戏发行商进行游戏发行和运营而提供的一种服务平台&#xff0c;具备多种功能以支持游戏在不同渠道上的推广和运营。以下是一些手游联运平台通常具备的功能&#xff1a; 多渠道发行&#xff1a;提供多种渠道&#xff0c;如应用商店、社交媒体、合作伙伴等…

opencv 提取选中区域内指定hsv颜色的水印

基于《QT 插件化图像算法研究平台》做的功能插件。提取选中区域内指定hsv颜色的水印。 《QT 插件化图像算法研究平台》有个HSV COLOR PICK功能&#xff0c;可以很直观、方便地分析出水印 的hsv颜色&#xff0c;比如, 蓝色&#xff1a;100,180,0,255,100,255。 然后利用 opencv …

Cortex-M3如何跳出BusFault,跳过出错代码,程序往下执行

为了方便演示如何实现该方法&#xff0c;采用构造触发BusFault&#xff0c;方便分析 首先需要对系统Handler控制及状态寄存器SHCSR.MEMFAULTENA使能 往SRAM reserved写入数据&#xff0c;触发BusFault 如上图所示&#xff0c;可以看到触发BusFault前BFSR寄存器第7为高&#…

【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}

红黑树 一、红黑树的概念 红黑树&#xff08;Red Black Tree&#xff09; 是一种自平衡二叉查找树&#xff0c;在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有…

框架分析(10)-SQLAlchemy

框架分析&#xff08;10&#xff09;-SQLAlchemy 专栏介绍SQLAlchemy特性分析ORM支持数据库适配器事务支持查询构建器数据库连接池事务管理器数据库迁移特性总结 优缺点优点强大的对象关系映射支持多种数据库灵活的查询语言自动管理数据库连接支持事务管理易于扩展和定制 缺点学…

OJ练习第164题——具有所有最深节点的最小子树

具有所有最深节点的最小子树 力扣链接&#xff1a;865. 具有所有最深节点的最小子树 力扣链接&#xff1a;1123. 最深叶节点的最近公共祖先 题目描述 给定一个根为 root 的二叉树&#xff0c;每个节点的深度是 该节点到根的最短距离 。 返回包含原始树中所有 最深节点 的…

机器学习笔记之最优化理论与方法(五)凸优化问题(上)

机器学习笔记之最优化理论与方法——凸优化问题[上] 引言凸优化问题的基本定义凸优化定义&#xff1a;示例 凸优化与非凸优化问题的区分局部最优解即全局最优解凸优化问题的最优性条件几种特殊凸问题的最优性条件无约束凸优化等式约束凸优化非负约束凸优化 引言 本节将介绍凸优…