美文网首页
一行不够显示多个菜单,进行拖拽显示

一行不够显示多个菜单,进行拖拽显示

作者: 岚平果 | 来源:发表于2021-03-23 09:55 被阅读0次
1、vue中, 我们要实现以下效果,多个菜单一行放置不下,被挡住,点击不了。这时候我们考虑用鼠标移动拖拽,对菜单进行拖拽操作,点击
image.png
2. 实现代码如下: html
// 给当前 h-tabs 增加 ref 属性,方便在 js 中获取该元素。
 <h-tabs ref="tabs"  type="card" size="small" v-if="tabData.length > 1" > </h-tabs>
3. js
<script>
let target, intX, scrollLeft;
export default {
  watch: {
      tabData (val) {
      this.$nextTick(() => {
        if (val.length > 0) {
          this.$refs.tabs.$el.querySelector('.h-tabs-nav-wrap').style.float = 'none';
          target = this.$refs.tabs.$refs.nav;
          Object.assign(target.style, {
            display: 'flex',
            overflow: 'hidden',
            'user-select': 'none'
          })
          target.onmousedown = (e) => {
            // 鼠标到窗口左侧的距离
            intX = e.clientX;
            // tarb的滚动条左侧的距离
            scrollLeft = e.currentTarget.scrollLeft;
            // 监听鼠标移动事件
            document.addEventListener('mousemove', this.dragMove)
          }
          // 监听鼠标松开事件
          document.addEventListener('mouseup', this.dcMouseUp);
          // 禁止拖拽
          target.ondrop = function (e) {
            e.preventDefault();
          }
          target.ondragstart = function (e) {
            e.preventDefault();
          }
          target.ondragend = function (e) {
            e.preventDefault();
          }
        }
      })
    }
  },
 methods: {
    // 滚动条移动了多少距离==鼠标移动的距离
    dragMove (e) {
      target.scrollLeft = scrollLeft + (intX - e.clientX);
    },
    // 取消鼠标移动监听事件
    dcMouseUp () {
      document.removeEventListener('mousemove', this.dragMove);
    },
}
}
</script>
4. this.refs.tabs.el.querySelector('.h-tabs-nav-wrap' )指哪如下元素
image.png

相关文章

  • 一行不够显示多个菜单,进行拖拽显示

    1、vue中, 我们要实现以下效果,多个菜单一行放置不下,被挡住,点击不了。这时候我们考虑用鼠标移动拖拽,对菜单进...

  • ps

    command + r 显示隐藏标尺在标尺上可以拖拽参考线可以通过移动工具拖拽回去,也可以通过在视图菜单中选择清...

  • Vue 插槽 slot 学习

    看上面的代码,父模板里面显示子模板 ,显示结果是不会显示菜单1 菜单2 的. 那如果想在子模板里面显示菜单1 菜单...

  • Sketch技巧-字体不显示中文解决

    菜单显示法 顶部菜单“查看”,“显示字体”。出来的字体在这里显示是中文,

  • 15-标签显示模式(display)

    一、标签显示模式 什么是标签的显示模式?标签以什么方式进行显示,比如div 自己占一行, 比如span 一行可以放...

  • ScrollView嵌套RecyclerView显示不全

    ScrollView里面有多个RecyclerView,发现其中一个显示不全,只显示一行,第二行需要拖动才显示出来...

  • 前端学习之CSS——元素显示模式

    1、什么是元素的显示模式 定义:元素显示模式就是元素(标签)以什么方式进行显示,比如 自己占一行,比如一行可以放多...

  • 鼠标点击菜单以外的地方 使下拉菜单消失

    //点击“显示菜单”按钮时,显示菜单,并阻止事件冒泡 //点击“菜单”内部时,阻止事件冒泡。(这样点击内部时,菜单...

  • 离屏渲染

    屏幕显示图像的原理: 高中物理应该学过显示器是如何显示图像的:需要显示的图像经过电子枪以极快的速度进行一行一行的扫...

  • 在vue.js里面使用tinymce富文本编辑器

    1、显示菜单栏+工具栏+状态栏 2、显示菜单栏+工具栏 3、不显示菜单栏+工具栏+状态栏

网友评论

      本文标题:一行不够显示多个菜单,进行拖拽显示

      本文链接:https://www.haomeiwen.com/subject/mvwxhltx.html