• vue滑动内容实现横向滑动滚动条效果


    一、这个滑动可能存在一点小问题,因为这个再项目中使用率不高,所以我没进行仔细测试。
    代码中的起名有点错位,这里懒得改了。废话不多少,直接上代码。

    <template>
      <div>
        <div class="grand">
            <div class="parent"
              @mousedown="handlemouse">
                    随便搜一篇满分作文,好看滑动效果
                    永恒之于我是整个生命,而瞬间之于我是每一刹那的哀伤和翻然悔悟。正是有无数个难忘或是不经意的瞬间,才完整了我的生命。
    
                    骤冷的降雪让我有些意外,有些惊喜。但是望着窗外愈加紧凑的雪片,我裹了裹身上单薄的外套继续躲在教室里。
                    
                    忽然有同学告诉我,说我父母给我送被子来了,正往寝室里去。我高兴地冲了出去,不是因为怕没有厚被子盖被冻,而是父母来了,
                   
            </div>
        </div>
      </div>
    </template>
    
    <script>
    import url from "../../common/api";
    export default {
      data(){
        return {
            isDrag:false,//是否在拖拽
            isClick:false,//是否是单击
        };
      },
      methods:{
        handlemouse(e){
            let startTime,endTime;
            let child=document.getElementsByClassName('parent')[0];
            let parent=document.getElementsByClassName('grand')[0];
            // 使用this.$refs.name获取dom元素,可能会获取到vue组件,他不支持获取元素的宽高以及监听鼠标事件
            let widthDiffer=parent.offsetWidth - child.offsetWidth;
            if(widthDiffer>0){
                //如果grand真实宽度比parent宽度长,那么就不用滑动了,直接返回
                this.isClick=true;
                return
            }
            startTime=new Date().getTime();//获取事件开始时间
            let disx= e.clientX - child.offsetLeft;
            this.isDrag=true;//设置开始拖拽
            parent.onmousemove =(e)=>{
              if(this.isDrag){//拖拽中
                  let mouseX=e.clientX; // 鼠标点击的位置
                  let x=mouseX-disx;
                  // 这里判断是开头和结尾和大盒子对齐
                  if(x>0){
                    child.style.left='0px'
                  }else if(x<-2300){
                    child.style.left='-2300px'
                  }else{
                    child.style.left=x+'px'//设置parent的位置
                  }
              }
            }
            parent.onmouseup=(e)=>{
              endTime=new Date().getTime();
              let timeDiffer=endTime-startTime;//获取抬起时间
              this.isDrag=false;
              if(timeDiffer<150){
                  //时间间隔小于150,那么就判断为单击事件,这里时间间隔可自由设置
                  this.isClick=true;
              }else{
                  this.isClick=false;
                  //拖拽结束,如果这里parent移出了grand边界,
                  parent.onmouseout=(ev)=>{
                    this.isDrag=false;
                  }
              }
            }
          
        },
      },
      mounted(){
        
      }
    }
    </script>
    
    <style lang="stylus" scoped>
    .grand{
      height: 60px;
      700px;
      background #f00
      position: relative;
      overflow: hidden; 
    }
    .parent{
      3000px;
      position: absolute;
      background #00f
      white-space: nowrap;
    }
    </style>
    
  • 相关阅读:
    强大的shell(一键redis,mysql,php,openresty,jdk)
    win7安装mysql-8.0.13-winx64
    linux设置代理
    我仅使用到的dd if
    shell脚本一键安装jdk
    《Objective-C》书籍阅读笔记
    关于Linux Vim练级攻略
    android开发过程中应该养成的良好习惯
    点击Button时,显示不同的效果、背景
    android studio 新建项目之后异常解决
  • 原文地址:https://www.cnblogs.com/enhengenhengNymph/p/15303099.html
Copyright © 2020-2023  润新知