国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue中通過(guò)JavaScript實(shí)現(xiàn)web端鼠標(biāo)橫向滑動(dòng)&觸控板滑動(dòng)效果-demo

這篇具有很好參考價(jià)值的文章主要介紹了vue中通過(guò)JavaScript實(shí)現(xiàn)web端鼠標(biāo)橫向滑動(dòng)&觸控板滑動(dòng)效果-demo。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

JavaScript實(shí)現(xiàn)web端鼠標(biāo)橫向滑動(dòng)&觸控板滑動(dòng)效果?

支持鼠標(biāo)拖動(dòng)滑動(dòng)&觸控板滑動(dòng)效果

web端實(shí)現(xiàn)滑動(dòng),就是對(duì)鼠標(biāo)按下、鼠標(biāo)松開(kāi)、鼠標(biāo)移動(dòng)事件進(jìn)行監(jiān)聽(tīng)

效果圖?

vue中通過(guò)JavaScript實(shí)現(xiàn)web端鼠標(biāo)橫向滑動(dòng)&觸控板滑動(dòng)效果-demo,Vue,JavaScript,HTML,前端,javascript,swiper,滑動(dòng)組件,原力計(jì)劃

?代碼

結(jié)構(gòu)代碼

<template>
  <div class="swiper">
    <div class="container" ref="container">
      <!-- 在這里添加要滑動(dòng)的橫向元素 -->
      <div class="box" v-for="num in 40" :key="num">
        <img src="@/assets/logo.png" style="width: 58px; height: 58px" />
        <span>滑動(dòng)元素{{ num }}</span>
      </div>
    </div>
  </div>
</template>

樣式代碼

<style lang="scss" scoped>
.swiper {
  .container {
    width: 90%;
    margin: 0 auto;
    display: flex;
    /* white-space: nowrap; //避免子元素在父元素內(nèi)換行 */
    overflow-x: auto; //顯示橫向滾動(dòng)條
    /* scroll-snap-type: x mandatory; //自動(dòng)吸附 */
    /* scroll-behavior: smooth; //平滑滾動(dòng)的效果 */
    .box {
      width: 100px;
      min-height: 100px;
      padding: 0 20px;
      /* scroll-snap-align: start; //自動(dòng)吸附 */
    }
  }
  ::-webkit-scrollbar {
    width: 0 !important;
  }
  ::-webkit-scrollbar {
    width: 0 !important;
    height: 0;
  }
}
</style>

業(yè)務(wù)邏輯代碼

<script setup>
import { ref, reactive, onMounted } from 'vue';
const container = ref(null);
// console.log(container);

const control = reactive({
  isDown: false, // 是否按下鼠標(biāo)
  startX: 0, // 鼠標(biāo)起始位置
  scrollLeft: 0 // 滾動(dòng)條位置
});

onMounted(() => {
  console.log('dom', container.value);
  // 總結(jié)web端實(shí)現(xiàn)滑動(dòng),就是對(duì)鼠標(biāo)按下、鼠標(biāo)松開(kāi)、鼠標(biāo)移動(dòng)事件進(jìn)行監(jiān)聽(tīng)
  container.value.addEventListener('mousedown', (e) => {
    control.isDown = true;
    control.startX = e.pageX - container.value.offsetLeft;
    control.scrollLeft = container.value.scrollLeft;
  });

  container.value.addEventListener('mouseup', (e) => {
    control.isDown = false;

    // // 找到最接近的滑動(dòng)元素
    // const children = container.value.getElementsByClassName('box');
    // let closestElement;
    // let closestDistance = Infinity;
    // const containerCenterX = container.value.offsetWidth / 2;

    // for (let i = 0; i < children.length; i++) {
    //   const box = children[i];
    //   const boxCenterX = box.offsetLeft + box.offsetWidth / 2;
    //   const distance = Math.abs(boxCenterX - containerCenterX);

    //   if (distance < closestDistance) {
    //     closestDistance = distance;
    //     closestElement = box;
    //   }
    // }

    // // 計(jì)算滾動(dòng)到最接近的滑動(dòng)元素的位置
    // const scrollLeft =
    //   closestElement.offsetLeft -
    //   container.value.offsetWidth / 2 +
    //   closestElement.offsetWidth / 2;
    // container.value.scrollTo({ left: scrollLeft, behavior: 'smooth' });

    // 找到最接近的滑動(dòng)元素
    // const children = container.value.getElementsByClassName('box');
    // let closestElement;
    // let closestDistance = Infinity;
    // const containerCenterX = container.value.offsetWidth / 2;

    // for (let i = 0; i < children.length; i++) {
    //   const box = children[i];
    //   const boxCenterX = box.offsetLeft + box.offsetWidth / 2;
    //   const distance = Math.abs(boxCenterX - containerCenterX);

    //   if (distance < closestDistance) {
    //     closestDistance = distance;
    //     closestElement = box;
    //   }
    // }

    // // 計(jì)算滾動(dòng)到最接近的滑動(dòng)元素的位置
    // // const scrollLeft = closestElement.offsetLeft - container.value.offsetLeft;
    // const scrollLeft =
    //   closestElement.offsetLeft -
    //   container.value.offsetLeft -
    //   closestElement.offsetWidth;
    // container.value.scrollTo({ left: scrollLeft, behavior: 'smooth' });
  });

  container.value.addEventListener('mousemove', (e) => {
    if (!control.isDown) return;
    e.preventDefault();
    const x = e.pageX - container.value.offsetLeft;
    const walk = (x - control.startX) * 2; // 滑動(dòng)距離
    container.value.scrollLeft = control.scrollLeft - walk;
  });

  // 元素的吸附效果
  //   container.value.addEventListener('scroll', () => {
  //     // 找到最接近的滑動(dòng)元素
  //     const children = container.value.getElementsByClassName('box');
  //     let closestElement;
  //     let closestDistance = Infinity;
  //     const containerCenterX = container.value.offsetWidth / 2;

  //     for (let i = 0; i < children.length; i++) {
  //       const box = children[i];
  //       const boxCenterX = box.offsetLeft + box.offsetWidth / 2;
  //       const distance = Math.abs(boxCenterX - containerCenterX);

  //       if (distance < closestDistance) {
  //         closestDistance = distance;
  //         closestElement = box;
  //       }
  //     }

  //     // 計(jì)算滾動(dòng)到最接近的滑動(dòng)元素的位置
  //     const scrollLeft = closestElement.offsetLeft - container.value.offsetLeft;
  //     container.value.scrollLeft = scrollLeft;
  //   });
});
</script>

在Vue中實(shí)現(xiàn)鼠標(biāo)橫向滑動(dòng)&觸控板滑動(dòng)效果可以通過(guò)以下步驟實(shí)現(xiàn):

  1. 首先在Vue中創(chuàng)建一個(gè)父組件,在該組件中引入子組件或者使用slot插入內(nèi)容。

  2. 在父組件中創(chuàng)建一個(gè)div容器,用來(lái)包裹滑動(dòng)內(nèi)容。

  3. 在該div容器中綁定一個(gè)事件監(jiān)聽(tīng)器,用來(lái)監(jiān)聽(tīng)用戶的鼠標(biāo)或觸摸板滑動(dòng)事件。

  4. 在事件監(jiān)聽(tīng)器中使用JavaScript獲取鼠標(biāo)或觸摸板的滑動(dòng)距離,并根據(jù)該距離計(jì)算出需要滑動(dòng)的內(nèi)容距離。

  5. 使用Vue的ref屬性獲取div容器,然后通過(guò)Vue的$refs屬性訪問(wèn)該容器,并修改其left屬性值,實(shí)現(xiàn)滑動(dòng)效果。

下面是一個(gè)簡(jiǎn)單的示例代碼:

<template>
  <div class="scroll-container" @mousemove="handleMouseMove" 
       @touchmove="handleTouchMove">
     <div class="scroll-content" ref="content">
       <slot></slot>
     </div>
  </div>
</template>

<script>
export default {
  methods: {
    handleMouseMove(event) {
      const scrollContent = this.$refs.content;
      const scrollSpeed = 5; // 滑動(dòng)速度
      scrollContent.style.left = `${-event.pageX / scrollSpeed}px`;
    },
    handleTouchMove(event) {
      const scrollContent = this.$refs.content;
      const scrollSpeed = 5; // 滑動(dòng)速度
      scrollContent.style.left = `${-event.touches[0].pageX / scrollSpeed}px`;
    },
  },
};
</script>

<style>
.scroll-container {
  width: 100%;
  height: 200px;
  overflow-x: scroll;
}

.scroll-content {
  position: relative;
  width: 2000px;
  height: 200px;
  white-space: nowrap;
  font-size: 0;
}
</style>

在上述示例代碼中,我們創(chuàng)建了一個(gè)scroll-container容器并綁定了鼠標(biāo)和觸摸板的滑動(dòng)事件監(jiān)聽(tīng)器,然后使用JavaScript計(jì)算出需要滑動(dòng)的距離,并修改了scroll-content容器的left屬性值實(shí)現(xiàn)了滑動(dòng)效果。需要注意的是,由于父組件的高度限制了滑動(dòng)內(nèi)容的高度,因此我們?cè)趕croll-content中使用了white-space: nowrap和font-size: 0兩個(gè)CSS樣式屬性,防止滑動(dòng)內(nèi)容換行和出現(xiàn)空白間隙。


在Vue中實(shí)現(xiàn)橫向滑動(dòng)效果可以通過(guò)以下步驟實(shí)現(xiàn):

  1. 在Vue組件中定義一個(gè)容器div,并設(shè)置其樣式為橫向滾動(dòng)條,例如:
<div class="scroll-container" ref="scrollContainer">
   <div class="scroll-content">
      <!-- 滾動(dòng)內(nèi)容 -->
   </div>
</div>

<style>
   .scroll-container {
      overflow-x: auto;
      white-space: nowrap;
      -webkit-overflow-scrolling: touch; // 兼容iOS平滑滾動(dòng)
   }

   .scroll-content {
      display: inline-block;
   }
</style>

在組件的created生命周期中,注冊(cè)滑動(dòng)事件監(jiān)聽(tīng)器,并記錄開(kāi)始滑動(dòng)時(shí)的鼠標(biāo)位置或觸摸位置:

created() {
   this.$refs.scrollContainer.addEventListener('mousedown', this.handleMouseDown);
   this.$refs.scrollContainer.addEventListener('touchstart', this.handleTouchStart, { passive: true });
},

methods: {
   handleMouseDown(event) {
      this.startX = event.clientX;
   },

   handleTouchStart(event) {
      this.startX = event.touches[0].clientX;
      this.touching = true;
   }
}

在組件的mounted生命周期中,注冊(cè)滑動(dòng)事件監(jiān)聽(tīng)器,并根據(jù)滑動(dòng)方向和滑動(dòng)距離計(jì)算出滾動(dòng)距離,并通過(guò)JavaScript控制滾動(dòng)條的位置:

mounted() {
   this.$refs.scrollContainer.addEventListener('mousemove', this.handleMouseMove);
   this.$refs.scrollContainer.addEventListener('touchmove', this.handleTouchMove, { passive: false });
   this.$refs.scrollContainer.addEventListener('mouseup', this.handleMouseUp);
   this.$refs.scrollContainer.addEventListener('touchend', this.handleTouchEnd);
},

methods: {
   handleMouseMove(event) {
      if (this.startX) {
         const distance = event.clientX - this.startX;
         this.$refs.scrollContainer.scrollLeft -= distance;
         this.startX = event.clientX;
      }
   },

   handleTouchMove(event) {
      if (this.startX) {
         const distance = event.touches[0].clientX - this.startX;
         this.$refs.scrollContainer.scrollLeft -= distance;
         this.startX = event.touches[0].clientX;
      }
   },

   handleMouseUp() {
      this.startX = null;
   },

   handleTouchEnd() {
      this.startX = null;
   }
}

通過(guò)以上步驟,就可以在Vue中實(shí)現(xiàn)橫向滑動(dòng)效果,并且支持鼠標(biāo)和觸摸操作。如果需要支持慣性滑動(dòng)效果,可以在滑動(dòng)結(jié)束時(shí)根據(jù)滑動(dòng)速度和滑動(dòng)方向計(jì)算出滾動(dòng)距離,并通過(guò)requestAnimationFrame動(dòng)畫函數(shù)實(shí)現(xiàn)平滑滾動(dòng)效果。


可以通過(guò)以下步驟實(shí)現(xiàn)該功能:

綁定事件監(jiān)聽(tīng)器,在vue組件的mounted生命周期函數(shù)或者created生命周期函數(shù)中,通過(guò)addEventListener方法綁定document的mousemove事件和touchmove事件。

mounted() {
  document.addEventListener('mousemove', this.handleMouseMove);
  document.addEventListener('touchmove', this.handleMouseMove);
},
methods: {
  handleMouseMove(event) {
    // 處理鼠標(biāo)或者觸摸板的移動(dòng)事件
  }
}

在處理移動(dòng)事件的函數(shù)中,根據(jù)元素的滑動(dòng)距離和滑動(dòng)方向,通過(guò)style屬性的left或者transform屬性改變?cè)氐奈恢谩F渲?,可以通過(guò)computed屬性或者ref獲取需要滑動(dòng)的元素的位置和寬度。

handleMouseMove(event) {
  const delta = event.clientX - this.lastX;
  const direction = delta > 0 ? -1 : 1;
  const absDelta = Math.abs(delta);
  const containerLeft = this.$refs.container.offsetLeft;
  const containerWidth = this.$refs.container.offsetWidth;
  const contentWidth = this.$refs.content.offsetWidth;
  const maxDelta = contentWidth - containerWidth - containerLeft;
  const currentDelta = containerLeft + delta;

  if (absDelta > 5 && (currentDelta >= 0 || currentDelta <= maxDelta)) {
    // 通過(guò)transform改變滑動(dòng)距離,可以有更好的性能表現(xiàn)
    this.$refs.container.style.transform = `translateX(${currentDelta}px)`;
    this.lastX = event.clientX;
  }
}

在滑動(dòng)停止時(shí),判斷靠近開(kāi)始的元素,通過(guò)計(jì)算元素到左端的距離來(lái)確定元素的位置,通過(guò)定位或者transform改變?cè)氐奈恢谩?/p>

handleMouseMove(event) {
  // ...
  this.timer = setTimeout(() => {
    const containerLeft = this.$refs.container.offsetLeft;
    const containerWidth = this.$refs.container.offsetWidth;
    const contentWidth = this.$refs.content.offsetWidth;
    const maxDelta = contentWidth - containerWidth - containerLeft;

    if (containerLeft < 0) {
      this.$refs.container.style.transform = `translateX(0)`;
      return;
    }

    if (maxDelta < 0) {
      this.$refs.container.style.transform = `translateX(${-maxDelta}px)`;
      return;
    }

    const items = this.$refs.content.children;
    let minDelta = Infinity;
    let index = 0;

    for (let i = 0; i < items.length; i++) {
      const itemLeft = items[i].offsetLeft;
      const delta = Math.abs(itemLeft - containerLeft);
      if (delta < minDelta) {
        minDelta = delta;
        index = i;
      }
    }

    const itemLeft = items[index].offsetLeft;
    const delta = itemLeft - containerLeft;
    this.$refs.container.style.transform = `translateX(${-delta}px)`;
  }, 100);
}

注意在組件銷毀時(shí),需要清除事件監(jiān)聽(tīng)器和定時(shí)器。

beforeDestroy() {
  document.removeEventListener('mousemove', this.handleMouseMove);
  document.removeEventListener('touchmove', this.handleMouseMove);
  clearTimeout(this.timer);
}

完整的vue組件代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-613204.html

<template>
  <div class="container" ref="container">
    <div class="content" ref="content">
      <div class="item" v-for="(item, index) in items" :key="index">{{item}}</div>
    </div>
  </div>
</template>

<script>
export default {
  name: "HorizontalScroll",
  data() {
    return {
      items: ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "Item 6", "Item 7", "Item 8", "Item 9", "Item 10"],
      lastX: 0,
      timer: null,
    };
  },
  mounted() {
    document.addEventListener('mousemove', this.handleMouseMove);
    document.addEventListener('touchmove', this.handleMouseMove);
  },
  beforeDestroy() {
    document.removeEventListener('mousemove', this.handleMouseMove);
    document.removeEventListener('touchmove', this.handleMouseMove);
    clearTimeout(this.timer);
  },
  methods: {
    handleMouseMove(event) {
      const delta = event.clientX - this.lastX;
      const direction = delta > 0 ? -1 : 1;
      const absDelta = Math.abs(delta);
      const containerLeft = this.$refs.container.offsetLeft;
      const containerWidth = this.$refs.container.offsetWidth;
      const contentWidth = this.$refs.content.offsetWidth;
      const maxDelta = contentWidth - containerWidth - containerLeft;
      const currentDelta = containerLeft + delta;

      if (absDelta > 5 && (currentDelta >= 0 || currentDelta <= maxDelta)) {
        this.$refs.container.style.transform = `translateX(${currentDelta}px)`;
        this.lastX = event.clientX;
      }

      clearTimeout(this.timer);
      this.timer = setTimeout(() => {
        const containerLeft = this.$refs.container.offsetLeft;
        const containerWidth = this.$refs.container.offsetWidth;
        const contentWidth = this.$refs.content.offsetWidth;
        const maxDelta = contentWidth - containerWidth - containerLeft;

        if (containerLeft < 0) {
          this.$refs.container.style.transform = `translateX(0)`;
          return;
        }

        if (maxDelta < 0) {
          this.$refs.container.style.transform = `translateX(${-maxDelta}px)`;
          return;
        }

        const items = this.$refs.content.children;
        let minDelta = Infinity;
        let index = 0;

        for (let i = 0; i < items.length; i++) {
          const itemLeft = items[i].offsetLeft;
          const delta = Math.abs(itemLeft - containerLeft);
          if (delta < minDelta) {
            minDelta = delta;
            index = i;
          }
        }

        const itemLeft = items[index].offsetLeft;
        const delta = itemLeft - containerLeft;
        this.$refs.container.style.transform = `translateX(${-delta}px)`;
      }, 100);
    },
  },
};
</script>

<style scoped>
.container {
  position: relative;
  width: 100%;
  height: 80px;
  overflow: hidden;
  margin: 0 auto;
  padding: 0 20px;
}

.content {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  white-space: nowrap;
}

.item {
  display: inline-block;
  height: 100%;
  line-height: 80px;
  padding: 0 10px;
  font-size: 16px;
  color: #333;
  background-color: #ddd;
  border-radius: 5px;
  margin-right: 10px;
}
</style>

到了這里,關(guān)于vue中通過(guò)JavaScript實(shí)現(xiàn)web端鼠標(biāo)橫向滑動(dòng)&觸控板滑動(dòng)效果-demo的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • vue + element 實(shí)現(xiàn)鼠標(biāo)左右滑動(dòng)效果

    我用了element中的走馬燈+overflow-x: auto; html (復(fù)制后格式化一下) js this.$refs.entrance.setActiveItem(index); 手動(dòng)切換當(dāng)前展示的索引

    2024年02月04日
    瀏覽(20)
  • web前端在vue中通過(guò)海康插件嵌入視頻,實(shí)現(xiàn)實(shí)時(shí)預(yù)覽以及視頻回放功能

    ? 首先第一步,在??倒倬W(wǎng)下??狄曨l插件下載到電腦中海康開(kāi)放平臺(tái) ? ?然后新建一個(gè)組件,下面我直接把我封裝好的組件代碼拿出來(lái),重要的地方我在代碼中添加了注釋 ? 以上是封裝的組件,下面是調(diào)用的方法? ?

    2024年02月03日
    瀏覽(24)
  • 微信小程序橫向滑動(dòng)菜單欄實(shí)現(xiàn)

    我們開(kāi)發(fā)項(xiàng)目過(guò)程中偶爾遇到這種的一個(gè)功能,橫向的滑動(dòng)菜單欄的實(shí)現(xiàn)。用scroll-view標(biāo)簽來(lái)實(shí)現(xiàn),scroll-x=\\\"true\\\"屬性來(lái)調(diào)整滑動(dòng)方向。廢話不用多說(shuō)直接上代碼。 WXML代碼段:

    2024年02月12日
    瀏覽(20)
  • MacBook 觸控板實(shí)現(xiàn)鼠標(biāo)中鍵操作

    MacBook 觸控板實(shí)現(xiàn)鼠標(biāo)中鍵操作

    ????????在某些場(chǎng)合,鼠標(biāo)中鍵可以大大提高工作效率。比如我在服務(wù)器中實(shí)現(xiàn)復(fù)制粘貼的操作就需要使用鼠標(biāo)中鍵來(lái)完成。macbook的一大亮點(diǎn)是其功能強(qiáng)大的觸控板,但是它自帶功能是不支持鼠標(biāo)中鍵的操作的,這時(shí)候單獨(dú)為此去購(gòu)買鼠標(biāo)就顯得十分難受。 ????????之

    2024年04月15日
    瀏覽(44)
  • Qt實(shí)現(xiàn)桌面畫線、標(biāo)記,流暢繪制,支持鼠標(biāo)和多點(diǎn)觸控繪制

    Qt實(shí)現(xiàn)桌面畫線、標(biāo)記,流暢繪制,支持鼠標(biāo)和多點(diǎn)觸控繪制

    經(jīng)常會(huì)在網(wǎng)上直播講課或者點(diǎn)評(píng)中看到可以在課件上或者桌面上進(jìn)行畫線標(biāo)記劃重點(diǎn),其實(shí)實(shí)現(xiàn)并不難,原理就是在桌面上蓋一個(gè)透明圖層,然后根據(jù)鼠標(biāo)點(diǎn)繪制曲線。 今天分享如何通過(guò)Qt的QGraphics體系來(lái)實(shí)現(xiàn)這個(gè)功能,以前的文章已經(jīng)介紹過(guò)使用Qt進(jìn)行曲線繪制及相關(guān)原理

    2024年02月15日
    瀏覽(66)
  • echarts的橫向柱狀圖文字省略,鼠標(biāo)移入顯示內(nèi)容 vue3

    echarts的橫向柱狀圖文字省略,鼠標(biāo)移入顯示內(nèi)容 vue3

    效果圖 如果是在x軸上的,就在x軸上添加 triggerEvent: true, 如果是y軸就在y軸添加,我是在y軸上添加的 并且自定義的方法(我取名為 extension ) 然后我放在末尾引入的 數(shù)據(jù)格式

    2024年02月04日
    瀏覽(22)
  • 什么?CSS 能實(shí)現(xiàn)鼠標(biāo)滾輪的橫向滾動(dòng)?

    什么?CSS 能實(shí)現(xiàn)鼠標(biāo)滾輪的橫向滾動(dòng)?

    再次考驗(yàn)?zāi)愕腸ss功底,這樣的橫向平滑滾動(dòng)效果,只用css就可以實(shí)現(xiàn),想不想來(lái)挑戰(zhàn)一下? 看到這個(gè)效果同學(xué)們腦子里第一個(gè)想到的是什么?監(jiān)聽(tīng)鼠標(biāo)的滾輪事件嗎?其實(shí)也可以實(shí)現(xiàn)但是非常的麻煩,因?yàn)橐龅狡交瑵L動(dòng)的話,還要去算這個(gè)事件的觸發(fā)頻率以及滾動(dòng)的距離。

    2024年02月12日
    瀏覽(23)
  • vue3鼠標(biāo)拖拽滑動(dòng)效果

    第一步 在utils下面新建一個(gè)directives.js文件,然后引入如下代碼 第二步 在main.js中引入 ?第三步 頁(yè)面直接使用即可

    2024年02月11日
    瀏覽(23)
  • vue 自定義指令(鼠標(biāo)拖拽滑動(dòng))

    vue 自定義指令(鼠標(biāo)拖拽滑動(dòng))

    1、創(chuàng)建一個(gè)js文件 2、在main.js中引入這個(gè)js import dragscroll from \\\'@utils/directives.js\\\'; app.directive(\\\'dragscroll\\\',dragscroll); 3、在頁(yè)面中使用 ul class=\\\"navBar\\\" id=\\\"nav\\\" v-dragscroll li拖動(dòng)1/li li拖動(dòng)2/li li拖動(dòng)3/li li拖動(dòng)4/li li拖動(dòng)5/li li拖動(dòng)6/li li拖動(dòng)7/li li拖動(dòng)8/li li拖動(dòng)9/li li拖動(dòng)10/li /ul 4、效果 ? 參考

    2024年02月11日
    瀏覽(27)
  • 【vue+ElementUI】實(shí)現(xiàn)web端鼠標(biāo)右擊打開(kāi)菜單

    最近做的開(kāi)源項(xiàng)目有個(gè)需求就是在 ElementUI 的 NavMenu 側(cè)邊欄中,實(shí)現(xiàn)鼠標(biāo)右擊打開(kāi)菜單功能,今天實(shí)現(xiàn)了一下,做個(gè)記錄。 鼠標(biāo)右擊打開(kāi)菜單 在鼠標(biāo)右擊的位置打開(kāi)菜單 點(diǎn)擊菜單項(xiàng)即可關(guān)閉菜單 點(diǎn)擊菜單外關(guān)閉菜單 菜單置于圖層的最頂層 菜單動(dòng)態(tài)樣式 2.1.在鼠標(biāo)右擊的位置

    2024年02月09日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包