Skip to content

1.scale将div进行动态缩放

注意:transform-origin可以设置缩放的源点(进行缩放之后会集中到这个位置)

js
this.scaleNum = 0.5; //可以动态进行改变
vue
<div
class="serviceIntro"
:style="{ transform: `scale(${scaleNum})`, 'transform-origin': 'top' }"
     ></div>

2.@click.self@click.stop

@click.self@click.stop 在大多数情况下是互斥的,并且通常不需要同时使用。它们的作用和效果不同。

  • @click.self 用于限制点击事件只在元素自身触发,不包括其子元素。它将阻止事件冒泡到父元素,但不会阻止事件继续传播到其他元素
  • @click.stop 用于阻止点击事件冒泡,即停止事件在 DOM 树中继续向上级元素触发相同类型的事件。它不会限制事件的触发范围,而是直接阻止事件继续向上冒泡。

因此,根据具体的需求,你可以选择使用 @click.self@click.stop,根据事件的处理逻辑和期望的行为来决定。

如果你希望点击元素自身时触发事件,并且不希望事件冒泡到父元素或其他元素,可以使用 @click.self

如果你希望点击元素时停止事件冒泡,不论是点击元素自身还是子元素,都不会触发其他元素上的相同类型的点击事件,可以使用 @click.stop

需要注意的是,同时使用 @click.self@click.stop 可能会产生意想不到的结果,因为它们的效果和作用不同。因此,在大多数情况下,不需要同时使用这两个修饰符。

希望这个解释对你有帮助。如果还有其他问题,请随时提问。

3.:deep(.className)代替::v-deep .className

css
:deep(.swiper-wrapper) {
  transition-timing-function: linear; // 线性过渡模拟走马灯效果
  -webkit-transition-timing-function: linear;
}
:deep(.swiper-pagination-bullet) {
  width: 12px;
  height: 12px;
}

还有一种写法:/deep/

但是在某些版本的scss中不行!

css
/deep/ .mark_div {
  display: none !important;
}

4.ts中类型几种写法

ts
//ref的时候定义变量
const images1 = ref<any[]>([]);
const images2 = ref([] as any[]);

//普通的定义变量
const images3 = [] as any[];
const images4: any[] = [];

5.nextTick钩子的使用

理解:nextTick就相当于是mounted后面紧接着的一个生命周期,这时DOM元素一定全部渲染完毕了

在 Vue 中,当组件的 mounted 生命周期钩子被触发时,DOM 元素已经被创建,但是并不能保证它们已经完全渲染到页面上。这是因为 Vue 在更新 DOM 时使用了异步的方式,所以在 mounted 阶段结束时,可能仍然存在一些异步更新的操作尚未完成。

使用 $nextTick 方法可以将代码延迟到下一个 DOM 更新周期之后执行。这意味着在 $nextTick 回调函数中的代码将在 DOM 更新之后执行,此时可以确保 DOM 元素已经完全渲染到页面上。

在上述示例中,我们使用 $nextTick 来确保在初始化 Swiper 实例之前等待 DOM 的完全渲染。这样可以避免在没有完全渲染的情况下尝试操作未渲染的 DOM 元素。

总之,使用 $nextTick 可以确保在 mounted 生命周期钩子中执行的代码在 DOM 完全渲染后执行,从而保证代码的正确执行顺序和操作的有效性。

如果你对 $nextTick 有进一步的疑问或需要更多解释,请随时提问。

6.swiper6在vue3中的写法获取swiper实例对象

这里演示实现轮播图鼠标放上去暂停,移开之后继续的实现:

利用@swiper事件,这个事件会在swiper实例创建完毕之后就进行调用方法

js
let mySwiper;
const onSwiper = (swiper) => {
  mySwiper = swiper;
};
const stopSwiper = () => {
  console.log(mySwiper);
  mySwiper.autoplay.stop();
};
const startSwiper = () => {
  // play.value = true;
  console.log(mySwiper);
  mySwiper.autoplay.start();
};
html
<div @mouseover="stopSwiper" @mouseleave="startSwiper">
  <swiper
    :spaceBetween="30"
    :slidesPerView="3"
    :autoplay="true"
    @swiper="onSwiper"
  >
    <swiper-slide
      ><img src="@/assets/img/x1/card-1.png" @click="cardAction(1)"
    /></swiper-slide>
    <swiper-slide
      ><img src="@/assets/img/x1/card-2.png" @click="cardAction(2)"
    /></swiper-slide>
    <swiper-slide
      ><img src="@/assets/img/x1/card-3.png" @click="cardAction(3)"
    /></swiper-slide>
    <swiper-slide
      ><img src="@/assets/img/x1/card-4.png" @click="cardAction('more')"
    /></swiper-slide>
  </swiper>
  <!-- 手写的一个轮播视频播放器 -->
  <dialogStaff
    :showDialogPics="showDialogPics"
    :curDataIndex="curDataIndex"
    :curLen="curLen"
    @closeDialog="closeDialog"
    @prev="prev"
    @next="next"
  >
    <video
      v-if="curDataIndex == 1"
      id="video1"
      autoplay
      loop
      :muted="muted1"
      :controls="true"
    >
      <source :src="video1" type="video/mp4" />
    </video>
    <video
      v-if="curDataIndex == 2"
      id="video2"
      autoplay
      loop
      :muted="muted2"
      :controls="true"
    >
      <source :src="video2" type="video/mp4" />
    </video>
    <video
      v-if="curDataIndex == 3"
      id="video3"
      autoplay
      loop
      :muted="muted3"
      :controls="true"
    >
      <source :src="video3" type="video/mp4" />
    </video>
  </dialogStaff>
</div>

7.vue3使用ref获取dom实例对象

js
const test = ref(null);
html
<div ref="test"></div>

8.el的clearable注意事项

el-input表单等在设置clearable时,最好在@onChange事件时,将相关的请求参数清除,这样才是完全的进行了清空操作