vue 设置头部可以左右滑动(vue实现左右滑动效果实例代码)
类别:编程学习 浏览量:2318
时间:2022-04-01 01:08:03 vue 设置头部可以左右滑动
vue实现左右滑动效果实例代码前言
个人实际开发中用到的效果问题总结出来便于自己以后开发查看调用,如果也适用其他人请随意拿走勿喷就行!
vue.js是现在流行的js框架之一,vue 是一套用于构建用户界面的渐进式javascript框架,与其它大型框架不同的是:vue被设计为可以自底向上逐层应用。vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合,另外一个方面,当vue与现代化的工具链以及各种支持类库结合使用时,vue也完全能够为复杂的单页应用提供驱动。
vue.js是用于构建交互式的Web界面的库,它提供MVVM数据绑定和一个可组合的组件系统,具有简单、灵活的API。从技术上讲,vue.js集中在MVVM模式上的视图模型层(viewModel),并通过双向数据绑定连接视图(view) 和模型(model)。实际的DOM操作和输出格式被抽象出来成指令和过滤器。相比其他的MVVM框架,vue.js更容易上手,它让你通过简单而灵活的API创建由数据驱动的UI组件。
实例代码
HTML代码
<template> <li id="SlideBar" class="box"> <li class="item" ref="slide" :style="slideStyle" @touchstart="start($event)" @touchmove="move($event)" @touchend="end($event)"> <img src="http://img2.imgtn.bdimg.com/it/u=2555191195,2735808065&fm=26&gp=0.jpg" alt=""> <li class="right"> <li class="title">你好!</li> <p class="text">哈哈哈</p> <p class="price">好不</p> </li> </li> <li class="btn" ref="btn"> <button>编辑</button> <button style="background:#387ef5;color:#fff">收藏</button> </li> </li> </template>
CSS代码
<style> .box{ position:relative; border-bottom:0.026667rem solid #666666; } .btn{ height:100%; position:absolute; right:0; top:0; background:red; display:flex; } button{ width:1.6rem; height:100%; background:#f8f8f8; border:none; } .item{ padding:0.266667rem; display:flex; position:relative; background:#fff; z-index: 2; box-shadow: 0.026667rem 0 0.053333rem #ddd; } .item img{ width:2.133333rem; height:2.133333rem; margin-right:0.4rem; border-radius: 0.133333rem; } .item .title{ font-size:0.48rem; float: left; } .item .text{ font-size:0.426667rem; color:#888; float: left; margin: 0 1.33rem; } .item .price{ color:#888; float: left; margin: 0 1.33rem; } </style>
JS代码
<script> export default { name: 'SlideBar', props: { }, data (){ return { flag: false, startX: 0, endX: 0, slideStyle: { left: 0, transition: 'none' } } }, methods: { start (e){ //记录开始滑动屏幕的X轴的位置 this.flag = true; this.startX = e.touches[0].clientX; this.endX = this.$refs.slide.offsetLeft; this.slideStyle.transition = 'none'; }, move (e){ if(this.flag){ // 处理鼠标移动的逻辑 var moveX = this.endX + (e.touches[0].clientX - this.startX); //计算滑动的距离 if(Math.abs(moveX) >= this.$refs.btn.offsetWidth && moveX < 0){ //判断滑动的距离是否大于class:btn的宽度 moveX = (Math.abs(moveX) - this.$refs.btn.offsetWidth) * 0.1; // 0.3阻力系数 this.slideStyle.left = - this.$refs.btn.offsetWidth - moveX + 'px'; }else if(moveX >= 0){ //滑动距离是否大于等于0 this.slideStyle.left = 0 + 'px'; //大于等于0让class:item等于0 }else{ this.slideStyle.left = moveX + 'px'; //小于0让class:item等于滑动的距离 } } }, end (e){ if(this.flag){ this.flag = false; // endX = slide.offsetLeft; var moveX = e.changedTouches[0].clientX - this.startX; //计算滑动的距离 this.slideStyle.transition = 'left .3s'; var btnWidth = this.$refs.btn.offsetWidth; //class:btn的宽度 if(moveX < 0){ if(Math.abs(moveX) >= btnWidth / 2 || Math.abs(this.$refs.slide.offsetLeft) >= this.$refs.btn.offsetWidth){ //是否大于class:btn宽度的一半 this.slideStyle.left = - btnWidth + 'px'; //左滑超过class:btn宽度的一半就滑回去 }else if(Math.abs(moveX) < btnWidth / 2){ //小于class:btn宽度的一半 this.slideStyle.left = 0 + 'px'; //左滑没有超过class:btn宽度的一半回原位 } }else if(moveX > 0 && this.endX != 0){ if(Math.abs(moveX) >= btnWidth / 2){ this.slideStyle.left = 0 + 'px'; //右滑超过class:btn宽度的一半就滑回去 }else if(Math.abs(moveX) < btnWidth / 2){ this.slideStyle.left = - btnWidth + 'px'; //右滑没有超过class:btn宽度的一半回原位 } } } } }, mounted (){ var _this = this; // 使用js的现代事件监听transition过渡结束 this.$refs.slide.addEventListener('transitionend',function(){ _this.endX = this.offsetLeft; }) } } </script>
总结
到此这篇关于vue实现左右滑动效果的文章就介绍到这了,更多相关vue左右滑动内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- vue获取图片并展示(vue卡片式点击切换图片组件使用详解)
- vuecli配置环境变量(Vue CLI中模式与环境变量的深入详解)
- vue 网页打印(vue打印功能实现的两种方法总结)
- vue3兼容的插件多吗(关于vue3编写挂载DOM的插件问题)
- vueelementui三级菜单(vue+element ui实现锚点定位)
- vue按需引入elementui组件(vue ElementUI实现异步加载树)
- springboot vue 异地登录(vue+springboot实现登录验证码)
- vue各种模块(一篇文章学会Vue中间件管道)
- vue实现聊天(Vue+ssh框架实现在线聊天)
- vue图片切换软件(Vue实现简单图片切换效果)
- vue开发的购物车0.1加0.2(vue实现可改变购物数量的购物车)
- vue.js入门教学第15讲(Vue.js 使用AntV X6的示例步骤)
- vue 父组件向子组件传值几种方法(Vue中父组件向子组件传递数据的几种方法)
- vue前端搜索功能如何实现(使用Vue3+Vant组件实现App搜索历史记录功能示例代码)
- vue滚动条下拉翻页(Vue中利用better-scroll组件实现横向滚动功能)
- vue端口号是什么原理(解决vue前后端端口不一致的问题)
- 焕然一新 成都轨道集团官方网站改版上线(成都轨道集团官方网站改版上线)
- 成都轨道交通19号线二期全线电通(成都轨道交通19号线二期全线电通)
- 19号线二期全线电通 轨道交通项目最新进展来了(19号线二期全线电通)
- 涉及3条地铁线路 成都这4座轨道交通站点有新名字了(涉及3条地铁线路)
- 来了 成都轨道交通5条线路刷新 进度条(成都轨道交通5条线路刷新)
- 一部手机两套系统 OPPO Find X3的正确打开方式你知道吗(一部手机两套系统)
热门推荐
- pycharm导入turtle出现错误(解决Pycharm调用Turtle时 窗口一闪而过的问题)
- flash一直在最上方,设置z-index无效
- vue动态生成的下拉框如何获取值(Vue 级联下拉框的设计与实现)
- mysql实现数据的备份的命令(Windows下MySQL定时备份脚本的实现)
- html样式中css怎么设置行高(CSS设置HTML元素的高度与宽度的各种情况总结)
- mysql自增锁(深入剖析 MySQL 自增锁)
- docker默认网桥设置(Docker默认网段修改实现方法解析)
- dedecms数据库备份(dedecms网站搬家需要的备份的文件)
- php的流程控制语句(PHP基于swoole多进程操作示例)
- dede执行查询语句(dede调用指定栏目下相关文章的实现方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9