实现效果:
1、通过点击左右箭头实现内容滑动
2、点击+添加标签
3、点击×删除标签
4、点击标签
实现思路:
1、position布局

1 、通过点击左右箭头实现内容滑动

代码:
html

<!-- 可滑动区域和操作可滑动区域的icon --><div class="scrollTab"><i class="el-icon-caret-left" @click="leftClick"></i><!-- 显示的区域 --><div id="classifyScroll"><!-- 滑动的区域 --><div class="classifys"><!-- 单个标签 --><divclass="classifys-item":class="index == currentFlowIndex ? 'classifys-activeItem' : 'classifys-item'"v-for="(item, index) in flowList":key="index":ref="`item${index}`"@click="changeFlow(item, index)"@dblclick="changeCurrentFlow(item, index)"><p>{{ item.backEnd.name ? item.backEnd.name : '空白页' }}</p><i class="el-icon-close" @click.stop="closeFlowList(index)"></i></div></div></div><i class="el-icon-plus" style="font-weight:500;" @click="addFlowList"></i><i class="el-icon-caret-right" @click="rightClick"></i></div>

scss

.scrollTab {width: calc(100% - 170px);display: flex;justify-content: space-between;align-items: center;margin-left: 170px;#classifyScroll {width: calc(100% - 45px);height: 36px;overflow: hidden;transition: all 0.3s;position: relative;display: flex;justify-content: flex-start;align-items: center;.classifys {position: absolute;left: 0px;height: 36px;transition: all 0.3s;width: auto;display: flex;align-items: center;background: #f0f0f0;&-item {width: 140px;font-size: 15px;font-weight: 400;color: #000;padding: 8px 0px 8px 6px;box-sizing: border-box;background: #f0f0f0;display: flex;justify-content: space-between;align-items: center;> p {width: 140px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;}> i {margin-right: 8px;}> i:hover {cursor: pointer;}}&-activeItem {background: #fff;// border-top-right-radius: 10px;}&-item:hover {cursor: pointer;}}}
}

js
点击左箭头

leftClick() {// 在点击的时候判断可滑动区域的left是否大于-20(因为我在左右点击的时候每次移动20px,所以需要判断是否大于20;)// 小于:直接将left设置为0// 大于:left则加20if (document.getElementsByClassName('classifys')[0].offsetLeft >= -20) {document.getElementsByClassName('classifys')[0].style.left = 0 + 'px';} else {document.getElementsByClassName('classifys')[0].style.left = document.getElementsByClassName('classifys')[0].offsetLeft + 20 + 'px';}
}

点击右箭头

rightClick() {// 在点击的时候判断可滑动区域的left+可视区域的宽度是否大于可滑动区域的宽度// 大于:则left为可视区域的宽度-可滑动区域的宽度// 小于:当前的可滑动区域的left-20即可if (document.getElementsByClassName('classifys')[0].scrollWidth +document.getElementsByClassName('classifys')[0].offsetLeft -20 <=document.getElementById('classifyScroll').offsetWidth) {document.getElementsByClassName('classifys')[0].style.left =document.getElementById('classifyScroll').offsetWidth -document.getElementsByClassName('classifys')[0].scrollWidth +'px';} else {document.getElementsByClassName('classifys')[0].style.left =document.getElementsByClassName('classifys')[0].offsetLeft - 20 + 'px';}}

2、点击+添加标签

此处需要注意的是,在添加标签的时候,可滑动区域的left应该为多少
判断:如果可滑动区域的宽度大于了可显示的区域,那么可滑动区域的left=可显示区域的宽度-可滑动区域的宽度

if (document.getElementsByClassName('classifys')[0].scrollWidth > document.getElementById('classifyScroll').offsetWidth) {document.getElementsByClassName('classifys')[0].style.left =document.getElementById('classifyScroll').offsetWidth -document.getElementsByClassName('classifys')[0].scrollWidth +'px';
}

3、点击×删除标签

此处需要注意的与添加标签时碰到的问题类似
判断:
(1)如果可滑动区域的宽度小于可显示的区域,那么可滑动区域的left= 0px
(2)如果可滑动区域的宽度大于可显示的区域,那么可滑动区域的left=当前的可滑动区域的left+140 + ‘px’。因为我给标签设置的宽度为140px,如果删除一个标签,那么理应给left+140

if (document.getElementsByClassName('classifys')[0].scrollWidth <= document.getElementById('classifyScroll').offsetWidth) {document.getElementsByClassName('classifys')[0].style.left = 0 + 'px';
} else {document.getElementsByClassName('classifys')[0].style.left =document.getElementsByClassName('classifys')[0].offsetLeft + 140 + 'px';
}

4、点击标签

此处需要注意的是在点击标签时,如果标签现在一半显示一半未显示,那么可滑动区域的left该怎么设置呢
标签的一半显示和一般未显示分为两种情况:

第一个红框圈起来的则为前半部分未显示,后半部分显示的情况
第二个红框圈起来的则为后半部分未显示,前半部分显示的情况
下方出现的index为当前点击的标签在数组中的位置
判断一:index*140 < 可滑动区域的left的值,那么证明,这个标签前半部分是被隐藏的,所以在点击它的时候,需要把前半部分显示出来,所以将可滑动区域的left设置为 index * -140 + ‘px’
判断二:(index+1)*140 > 可滑动区域的left + 可显示区域的宽度,那么证明在,这个标签的后半部分是被隐藏的,所以在点击它的时候,需要把后半部分显示出来,所以将可滑动区域的left设置为document.getElementById(‘classifyScroll’).offsetWidth - (index + 1) * -140 + ‘px’

if (document.getElementsByClassName('classifys')[0].scrollWidth > document.getElementById('classifyScroll').offsetWidth) {if (index * 140 < Math.abs(document.getElementsByClassName('classifys')[0].offsetLeft)) {document.getElementsByClassName('classifys')[0].style.left = index * -140 + 'px';} else if ((index + 1) * 140 >document.getElementById('classifyScroll').offsetWidth -document.getElementsByClassName('classifys')[0].offsetLeft) {document.getElementsByClassName('classifys')[0].style.left =document.getElementById('classifyScroll').offsetWidth - (index + 1) * 140 + 'px';}
}

有问题欢迎来问!!!

点击左右箭头实现内容滑动相关推荐

  1. vue点击左右箭头左右滑动效果

    点击左右箭头左右滑动效果 代码: <template><div class="vertical-scroll-wrap"><svg class=&qu ...

  2. 点击左右箭头滑动导航栏,动态隐藏/显示左右箭头

    一.需求 1. 点击左箭头,导航栏向左滑动.当导航栏滑动到最左边时,隐藏右箭头: 2. 点击右箭头,导航栏向右滑动.当导航栏滑动到最右边时,隐藏左箭头: 3.点击导航A,导航A高亮显示. 二.思路 1 ...

  3. vue列表左右箭头滑动_vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)...

    1.效果图如下 2.vue代码如下 indicator-position="none" :autoplay="false"> > {{items.b ...

  4. php ajax 上拉显示更多,PHP+Ajax点击加载更多内容 -这个效果好,速度快,只能点击更多加载,不能滚动自动加载...

    这个效果好,速度快,只能点击更多加载,不能滚动自动加载 一.HTML部分 ::点击加载更多内容:: 引入jQuery插件和jquery.more.js加载更多插件 jQuery $(function( ...

  5. 40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二

    <40个有创意的jQuery图片和内容滑动及弹出插件收藏集之一> <40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三> <40个有创意的jQuery图片和内容 ...

  6. Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件

    为什么80%的码农都做不了架构师?>>>    Swiper(Swiper master)是目前应用较广泛的移动端网页触摸内容滑动js插件 http://www.swiper.com ...

  7. Android 系统(53)---关于触摸屏快速点击事件误识别为滑动事件

    关于触摸屏快速点击事件误识别为滑动事件 问题 触屏太灵敏,有时候点击一下会误认为滑动事件,造成误识别.   解决方法 增大触发触屏滑动所需要的距离条件,将Config.xml(frameworks\b ...

  8. 用jQuery做点击下箭头改变方向

    先上一张图,效果就是要求点击下箭头,变成上箭头,再点击恢复原状,其实做这个并不难,但需要注意的是,如果设置全局变量flag,当同时点开多个条目,箭头方向就会失常.所以要给每个img图片上设置一个自定义 ...

  9. Vue点击左右箭头改变数据

    vue点击左右箭头改变数据 html中绑定数据 <div class="content"><div class="text"><p ...

最新文章

  1. python学习(1)
  2. 高可用延迟队列设计与实现
  3. windchill 可交付成果 文档_敏捷等于没有文档吗?敏捷项目管理VS传统项目管理区别在哪里?...
  4. JPA 2 | 获取联接以及我们是否应该使用它们
  5. 蔚来宣布再次完成1亿美元可转债融资
  6. C++并发编程 (1) 基本知识
  7. 强制好评,付费去广告,诈骗应用横行AppStore
  8. 第八届蓝桥杯第十题 k倍区间
  9. 京东全链路压测军演系统(ForceBot)架构解密
  10. 从Slice_Header学习H.264(二)--片头的子语法项目
  11. Barrett reduction
  12. MySQL基础 + 34道练习 +Mysql高级 + sql优化
  13. DDR SDRAM内存优化
  14. 专升本英语——语法知识——基础语法——第一节 名词和代词【学习笔记】
  15. 0x00007FFE9071C408 (ucrtbase.dll) (xxx.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数。
  16. 捕鱼源码 免费提供和分享,仅供unity和Java初学者学习参考,希望能带来帮助
  17. 冲孔网——现在普遍应用的装饰产品-KAIYAO
  18. 本地管理表空间(LMT)与自动段空间管理(ASSM)概念(未看)
  19. torch之optimizer.step() 和loss.backward()和scheduler.step()的关系与区别
  20. Pr视频剪辑——自我学习

热门文章

  1. python 拦截windows弹窗广告_win10怎么阻止弹窗广告拦截功能的方法
  2. 域名过期后能否抢注过期高外链域名?
  3. 如何用计算机产生随机数,如何在计算器产生随机数
  4. cad怎么将图层后置_cad怎么把整个图层置于底层
  5. Mac安装Adobe Zii5.3.0过程
  6. Axi协议和verilog实现1-AXI总线和关键问题描述
  7. android 投屏mac,MAC投屏ipad、手机
  8. aecc2019能装saber吗_【2018年10月重磅】After Effects CC2019 分享新功能介绍
  9. Project2016创建WBS并且进行相关设置
  10. php 跳转邮箱,实例详解JS简单实现点击跳转登陆邮箱功能的方法