仿今日头条横向滚动导航栏--原生js
咳咳!先打一波小广告,在上一篇里忘记了,那啥……我的那个个人博客做好了-->(我的博客)<--。嘿嘿
好嘞,言归正传,说说我们的效果。
其实就是实现横向滑动,进行选择。
原理:
- 鼠标按下,获取当前鼠标坐标,作为起始坐标;
- 鼠标移动,获取坐标,与起始坐标进行一系列的数学运算;
- 给 left 赋值,改变位置;
- 移动过多,超过时进行处理。
function scrollTabX() {
let nav = document.getElementById("nav");
let navs = document.getElementsByTagName("li");
let navbar = document.getElementsByClassName("navbar")[0];
let left = nav.style.left; // ul 距离左边的距离
let totalWidth = 0; // 总宽度
let minusValue = 0; // 设备宽度与总宽度的差值
left = left ? left : 0; // 初始时 ul 距离左边 0px
// 获取所有 li 所占用的宽度
for (let i = 0; i < navs.length; i++) totalWidth += navs[i].offsetWidth;
// 固定 ul 的宽度
nav.style.width = totalWidth + 'px';
minusValue = window.screen.width - totalWidth;
// 当设备宽度小于 ul 宽度的时候,执行水平滚动
if (minusValue < 0) {
(function () {
nav.onmousedown = function (ev) {
let e = ev || event;
// 获取鼠标的位置信息
let startX = e.screenX;
nav.onmousemove = function (e) {
left += (e.screenX - startX) / 10;
nav.style.left = left + 'px';
}
}
nav.onmouseup = function () {
nav.onmousemove = null;
// 拉多了,要回来呢,兄弟
if (left > 0) {
let timer = setInterval(function () {
left -= 50;
if (left <= 0) {
left = 0;
clearInterval(timer);
}
nav.style.left = left + 'px';
}, 20);
}
if (left < minusValue) {
let timer = setInterval(function () {
left += 50;
if (left >= minusValue) {
left = minusValue - 10; // 有个 10px 的 padding
clearInterval(timer);
}
nav.style.left = left + 'px';
}, 20);
}
// 去掉阴影
navbar.style.boxShadow = (left <= minusValue) ? "0 0 0 #fff" : "-5px 0 10px #fff inset";
}
})();
}
}
效果图(动图不会哎):

反正想像一下效果就好了,哈哈。
至于说这篇写的不怎么样,我为什么还要置顶?……当然是因为我的博客啦!
仿今日头条横向滚动导航栏--原生js的更多相关文章
- iOS仿今日头条滑动导航
之前写了篇博客网易首页导航封装类.网易首页导航封装类优化,今天在前两个的基础上仿下今日头条. 1.网易首页导航封装类中主要解决了上面导航的ScrollView和下面的页面的ScrollView联动的问 ...
- vue 仿今日头条
vue 仿今日头条 为了增加移动端项目的经验,近一周通过 vue 仿写今日头条,以下就项目实现过程中遇到的问题以及解决方法给出总结,有什么不正确的地方,恳请大家批评指正^ _ ^!,代码仓库地址为 g ...
- vue2.0仿今日头条开源项目
vue-toutiao 这是用 vue.js 2.0 高仿 今日头条 的移动端项目,结合了原生app的部分功能以及网页版. 前言 本人是 今日头条 的重度用户,在学习vue.js过程中,在GitHub ...
- android仿今日头条App、多种漂亮加载效果、选择器汇总、记事本App、Kotlin开发等源码
Android精选源码 android漂亮的加载效果 android各种 选择器 汇总源码 Android仿bilibili搜索框效果 Android记事本app.分类,涂鸦.添加图片或者其他附件 仿 ...
- [Android] Android 手机下 仿 今日头条 新闻客户端
利用一个月的时间,自学了 Android 开发 ,为了检验学习成果,特意 开发了这个 仿 今日头条 新闻客户端 AppNews 包括图文新闻+视频新闻+图片新闻 预览演示如下: 功能说明: 1)底部 ...
- Android 代码实现viewPager+fragment 模仿今日头条的顶部导航
模仿今日头条的顶部导航: 下载地址: http://download.csdn.net/detail/u014608640/9917700 效果图:
- Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)
前言 上篇博客我们说到了今日头条频道管理的操作交互体验,我也介绍了2个GridView之间Item的相互移动.详情请參考:Android 仿今日头条频道管理(上)(GridView之间Item的移动和 ...
- html实现滚动播报(原生JS实现)
html实现滚动播报(原生JS实现) 废话不多说,先看一个简单的滚动效果(鼠标放上去的时候可以暂停滚动,谷歌版本 66.0.3359.139(正式版本)查看时会出现滚动混乱.单独提出来的时候不会,应该 ...
- Android之仿今日头条顶部导航栏效果
随着时间的推移现在的软件要求显示的内容越来越多,所以要在小的屏幕上能够更好的显示更多的内容,首先我们会想到底部菜单栏,但是有时候像今日头条新闻客户端要显示的内容太多,而且又想在主界面全部显示出来,所以 ...
随机推荐
- playbook
1 --- - hosts: web-server 3 remote_user: root tasks: - name: stop logstash shell: PID=` $PID &&a ...
- python 的包的导入
已经写过一篇包的导入了,最近又遇到了点问题,所以想把这些再搞的明白点就又试了试 代码结构如下 在test目录下,有Admin包,home包,在home下有它的子包foo 各个文件代码如下 admins ...
- Java语法 [HelloWorld]
程序代码: public class lqx {// AAAAANBBBBCKJKSLJIOQL/*请手打哦!*/ public static void main (String[] args) { ...
- String、StringBuffer、StringBuilder区别
String.StringBuffer.StringBuilder区别 StringBuffer.StringBuilder和String一样,也用来代表字符串.String类是不可变类,任何对Str ...
- Django中的class Meta
元数据 class Meta做为嵌套类,主要目的是给上级类添加一些功能,或者指定一些标准 # 格式化 将返回的结果自定义 def __str__(self) rerurn self.username ...
- 深度学习中,使用regularization正则化(weight_decay)的好处,loss=nan
刚开始训练一个模型,自己就直接用了,而且感觉训练的数据量也挺大的,因此就没有使用正则化, 可能用的少的原因,我也就不用了,后面,训练到一定程度,accuracy不上升,loss不下降,老是出现loss ...
- faster-RCNN框架之rpn 较小目标检测,如果只使用rpn,并减少多个候选框
通常faster-rcnn目标检测有两个步骤,一个是侯选框生成,一个是侯选框微调+目标区分,但是对于单目标识别, 我经常喜欢只使用rpn网络,效果还不错,不过仅仅的rpn使用参考的参数通常会造成一个目 ...
- DB2 公共表表达式(WITH语句的使用)
----start 说起WITH 语句,除了那些第一次听说WITH语句的人,大部分人都觉得它是用来做递归查询的.其实那只是它的一个用途而已,它的本名正如我们标题写的那样,叫做:公共表表达式(Commo ...
- Cocos2dx开发之屏幕适配
由于各种智能手机的屏幕大小都不一致,会出现同一张图片资源在不同的设备分辨率下显示不一样的问题.为避免这样的情况,需要Cocos引擎能提供多分辨率的支持,也就是说要求实现这样的效果 — 开发者不需要考虑 ...
- 20175314 《Java程序设计》第四周学习总结
20175314 <Java程序设计>第四周学习总结 教材学习内容总结 每个子类只能有一个父类,而一个父类可以有多个子类.可以使用关键字extends来定义一个类的子类:class 子类名 ...