移动端手指操控左右滑动的菜单

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> 
<meta charset="UTF-8"> 
<title>移动端手指操控左右滑动的菜单</title> 
<style type="text/css"> 
body {margin:0;} 
.menu-wrap { 
width: 100%; 
height: 50px; 
overflow: hidden; 
} 
.menu-wrap-layer2 { 
width: 100%; 
height: 50px; 
overflow: hidden; 
} 
.menu-list { 
display: inline-block; 
white-space: nowrap; 
transition-duration: 0ms; 
transform: translateX(0px); 
} 
.menu-list-item { 
display: inline-block; 
} 
.menu-list-item span { 
display: inline-block; 
width: 100px; 
margin: 0 3px; 
text-align: center; 
} 
</style> 
</head> 
<body> 
<div id="menu-wrap" class="menu-wrap"> 
<div class="menu-list js-menu-list"> 
<div class="menu-list-item"> 
<span data-index="0">全站</span> 
</div> 
<div class="menu-list-item"> 
<span data-index="1">动画</span> 
</div> 
<div class="menu-list-item"> 
<span data-index="2">番剧</span> 
</div> 
<div class="menu-list-item"> 
<span data-index="3">国创</span> 
</div> 
<div class="menu-list-item"> 
<span data-index="4">音乐</span> 
</div> 
<div class="menu-list-item"> 
<span>舞蹈</span> 
</div> 
<div class="menu-list-item"> 
<span>科技</span> 
</div> 
<div class="menu-list-item"> 
<span>游戏</span> 
</div> 
<div class="menu-list-item"> 
<span>娱乐</span> 
</div> 
<div class="menu-list-item"> 
<span>电影</span> 
</div> 
<div class="menu-list-item"> 
<span>电视剧</span> 
</div> 
<div class="menu-list-item"> 
<span>纪录片</span> 
</div> 
</div> 
</div> 
<div> 
<div class="menu-wrap-layer2 js-menu-wrap-layer2 js-menu-wrap0" style="display: block;"> 
<div class="menu-list js-menu-list"> 
<div class="menu-list-item"> 
<span>二级菜单1</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单2</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单3</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单4</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单5</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单6</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单7</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单8</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单9</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单10</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单11</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单12</span> 
</div> 
</div> 
</div> <div class="menu-wrap-layer2 js-menu-wrap-layer2 js-menu-wrap1" style="display: none;"> 
<div class="menu-list js-menu-list"> 
<div class="menu-list-item"> 
<span>二级菜单s1</span> 
</div> 
<div class="menu-list-item"> 
<span>二级菜单s2</span> 
</div> 
</div> 
</div> 
</div> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script> 
<script type="text/javascript"> $(function() { 
var menu = function(wrap, menuList, menuItems) { 
var deviceWidth = $(window).width(); 
var positionX = 0; 
var menuListPositionX1 = wrap.offset().left; 
var menuListPositionX2 = menuListPositionX1 + wrap.width(); $(menuList).attr("style","transition-duration: 0ms;transform: translateX(0px);"); menuList.addEventListener('touchstart',function(event){ 
if(event.targetTouches.length == 1){ 
var touch = event.targetTouches[0]; 
positionX = touch.pageX; 
//确定本次拖动transform的初始值 
var transformStr = menuList.style.transform; 
transformStr = transformStr.substring(11); 
var index = transformStr.lastIndexOf("p"); 
transformStr = transformStr.substring(0, index); 
transformX = parseInt(transformStr); 
//确定本次拖动的div宽度值 
var widthStr = menuList.style.width; 
thisWidth = parseInt(widthStr.substring(0,widthStr.lastIndexOf("p"))); 
} 
}, false); 
menuList.addEventListener('touchmove', function(event) { 
//阻止其他事件 
event.preventDefault(); 
//获取当前坐标 
if(event.targetTouches.length == 1){ 
var touch = event.targetTouches[0]; 
menuList.style.transform = 'translateX('+(transformX+touch.pageX-positionX)+'px)'; 
$(menuList).css("width",thisWidth+positionX-touch.pageX); 
} 
}, false); 
menuList.addEventListener('touchend', function(event) { 
var menuItem1 = menuItems[0]; 
var menuItem1Left = $(menuItem1).offset().left; 
var menuItem2 = menuItems[menuItems.length-1]; 
var menuItemPositionX = $(menuItem2).offset().left+$(menuItem2).width(); 
var firstToLast = menuItemPositionX - menuItem1Left; 
if (menuItem1Left > menuListPositionX1 || firstToLast < deviceWidth) { 
menuList.style.transform = 'translateX('+(menuListPositionX1)+'px)'; 
} 
if(menuItemPositionX < menuListPositionX2 && menuItem1Left < 0 && firstToLast > deviceWidth) { 
var myWidth = $(menuList).width() - deviceWidth; 
menuList.style.transform = 'translateX('+(0-myWidth)+'px)'; 
} 
}, false); 
} var event = function() { 
$('#menu-wrap .js-menu-list span').click(function () { 
console.log($(this).attr('data-index')); 
var activeMenu = $('.js-menu-wrap' + $(this).attr('data-index')); 
activeMenu.siblings().hide(); 
activeMenu.show(); 
}); 
} 
var init = function() { 
var menuWrap = $('#menu-wrap'); 
var menuList = $("#menu-wrap .js-menu-list")[0]; 
var menuListItems = $("#menu-wrap .menu-list-item"); 
menu(menuWrap, menuList, menuListItems); var menuWrapLayer2 = $('.js-menu-wrap-layer2'); 
var helper = function (tempWrap, tempMenuList, tempMenuListItems) { 
var tempFun = function() { 
menu(tempWrap, tempMenuList, tempMenuListItems); 
}(); 
} 
for (var i = 0; i < menuWrapLayer2.length; i++) { 
var tempWrap = $(menuWrapLayer2[i]); 
var tempMenuList = $(menuWrapLayer2[i]).find('.js-menu-list')[0]; 
var tempMenuListItems = $(menuWrapLayer2[i]).find('.menu-list-item'); 
helper(tempWrap, tempMenuList, tempMenuListItems); 
} 
event(); 
}(); 
}); 
</script> 
</body> 
</html>

 

转载于:https://www.cnblogs.com/gopark/p/9056639.html

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

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

相关文章

马哥linux高薪中级-DNS

第一章 简介一、DNSdomain name server&#xff0c;用来将计算机名称或者域名解析成ip地址的服务协议。用户在使用域名访问时会先通过DNS服务请求域名对应的ip地址&#xff0c;然后缓存下来&#xff0c;然后才通过ip地址进行通信。最初域名解析是通过HOSTS文件来静态绑定的。DN…

愚蠢的怪胎技巧:通过命令行管理SkyDrive

Originally launched as an April Fools prank by the Microsoft SkyDrive team, SkyCMD turned out to be a really geeky way to manage files and folders on your SkyDrive from the command line. Lets take a quick look. SkyCMD最初是由Microsoft SkyDrive团队以愚人节恶…

关于vue父子组件之间事件触发及数据传递问题

父组件&#xff1a;1&#xff0c;引入子组件2&#xff0c;ref 3&#xff0c;需要更新数据操作的地方 子组件&#xff1a;1&#xff0c;定义同名事件&#xff0c;拿到数据执行相关操作

.NET Core如何通过认证机制访问Kafka?

【.NET Core】| 总结/Edison Zhou大家好&#xff0c;我是Edison。最近有一个ASP.NET Core使用认证机制访问Kafka的需求&#xff0c;加之我们又使用了CAP这个开源项目使用的Kafka&#xff0c;于是网上寻找了一番发现对应资料太少&#xff0c;于是调查了一番&#xff0c;做了如下…

JQuery框架2.位置属性|筛选方法|事件

1、位置属性 jquery的css position获取匹配元素相对父元素的偏移位置&#xff1b;offset获取匹配元素在当前视口的相对偏移,返回的对象包含两个整型属性&#xff1a;top 和 left $("p").offset() $(div).offset().top $("p").offset().left scrollTop获取匹…

新手学习Java必需要知道的这些基本概念!

学习好比盖房子&#xff0c;打地基好很重要&#xff0c;房了能盖多高关键看地基&#xff1b;学习同样道理&#xff0c;基础知识是以后学习一切技术的必要条件&#xff0c;我们在准备学习一门开发语言时&#xff0c;首先要学习它的基础&#xff0c;不仅要会&#xff0c;更要融会…

jenkins没安装git报错

Jenkins新建项目中源码管理使用Git时遇到如下问题&#xff1a; 在安装jenkins服务器上查看一下git版本&#xff0c;可能没有安装git 也可能是git版本太低 [rootlocalhost nnnnn]# git --version git version 1.8.3.1 yum安装的版本太低了 打开Jenkins的 主页面 > 系统管理 …

如何使用 IdGen 生成 UID

在分布式系统中&#xff0c;雪花 ID 是一种常用的唯一 ID 生成算法。它通过结合时间戳、机器码和自增序列来生成 64 位整数 ID&#xff0c;可以保证 ID 的唯一性和顺序性。在.Net 项目中&#xff0c;我们可以使用 IdGen 这个类库来生成雪花 ID。它是一个开源的类库&#xff0c;…

mac 不能连接wi-fi_如何在Mac OS X中查看当前的Wi-Fi连接速度

mac 不能连接wi-fiEver since I’ve been using my new MacBook Air, I’ve been befuddled by how to do some of the simplest tasks in Mac OS X that I would normally do from my Windows laptop—like show the connection speed for the current Wi-Fi network. So am I…

User Stories - 最佳实践 (Best Practices)

在转向敏捷之后&#xff0c;很多团队开始使用“用户故事”一词。用户故事是一种简单而优雅的技术&#xff0c;可以收集客户需求。然而&#xff0c;它需要一定的理解和实践才能用User Stories构建出色的软件。 让我们仔细看看用户故事是什么以及如何使用这种技术取得成功。 什么…

聊一聊promise的前世今生

promise的概念已经出现很久了&#xff0c;浏览器、nodejs都已经全部实现promise了。现在来聊&#xff0c;是不是有点过时了&#xff1f; 确实&#xff0c;如果不扯淡&#xff0c;这篇随笔根本不会有太多内容。所以&#xff0c;我就尽可能的&#xff0c;多扯一扯&#xff0c;聊一…

chromebook刷机_如何在Chromebook上切换(或离开)Canary频道

chromebook刷机Just like Chrome, Google offers multiple channels of the Chrome OS operating system. In addition to the standard Stable, Beta, and Developer channels you can choose from on the About page, there’s a special bleeding-edge Canary channel. The …

C++--day05

目录: 1. C的提高 1-131P 时间七天 2. C的基础 132-286P 时间八天 3. C的提高 287-378P 时间五天 4. C/C的数据结构 379-482P 时间五天 5. C/C的设计模式基础 483-540P 时间三天 视频资料&#xff1a;https://www.bilibili.com/video/av27904891?fromsearch&seid108915144…

通过 CancellationToken 提高 Web 性能

在 Web 开发中&#xff0c;经常会遇到这样的场景&#xff1a;用户发起一个请求&#xff0c;Web 服务器执行一些计算密集型的操作&#xff0c;等待结果返回给用户。这种情况下&#xff0c;如果用户在等待结果的过程中取消了请求&#xff0c;那么服务器端依然会继续执行计算&…

libreoffice_如何更改您在LibreOffice中可以撤消的操作数

libreofficeIn LibreOffice programs, you can undo one action after another…to a point. The default number of actions you can undo is 100, but that number is easy to change. 在LibreOffice程序中&#xff0c;您可以撤消一个动作&#xff0c;直到某个点。 您可以撤消…

远程连接服务器出现身份验证错误 要求的函数不受支持

来源&#xff1a;https://www.cnblogs.com/lindajia/p/9021082.html 以往发布程序到服务器都没问题。今天远程桌面连接到服务器&#xff0c;突然出现了异常&#xff01;异常信息为&#xff1a; 在网上看到有多种解决方案&#xff1a;发现有种修改注册表的方式很简单。 详细步骤…

截取图片生成头像插件

上传头像插件 目的&#xff1a; 帮助开发者快速开发上传头像功能点 背景&#xff1a; 现在b&#xff0c;g能搜到的头像上传插件并不太好用&#xff0c;所以想提供一个比较自由度的上传并且可以剪切的插件。 资源&#xff1a; 具体资源请查看这里 实现大致思路如下&#xff1a; …

CDH集群安装配置(五)- Cloudera Manager Server

在线安装 sudo yum install cloudera-manager-daemons cloudera-manager-server 离线安装 资源下载地址 https://archive.cloudera.com/cm6/6.1.0/redhat7/yum/RPMS/x86_64/ 上次下面资源包到cdh1节点 cloudera-manager-server-6.1.0-769885.el7.x86_64.rpm cloudera-manager-s…

c++简单程序设计-5

编程实验部分1.vector3.cpp #include <iostream> #include <vector> #include <string> using namespace std;// 函数声明 void output1(vector<string> &); void output2(vector<string> &); int main() {vector<string>like…

关于JavaScript的编译原理

引擎&#xff1a;负责整个js程序的编译和执行过程编译器&#xff1a;负责语法分析和代码生成作用域&#xff1a;收集和维护一系列查询&#xff08;由所有声明的标识符组成&#xff09; 【例子&#xff1a;声明一个变量并赋值 var a value&#xff1b;】 Step1.编译器对该程序段…