likes
comments
collection
share

使用 useParallax 创建图片视差效果

作者站长头像
站长
· 阅读数 16

前言

得益于 vue3 在社区的收欢迎度,各种基于 vue3 的组件库的活跃度也日益增长,在众多组件库中 ElementPlus 尤为受到大家欢迎,在 Github 上已经有 16.7K 的星星。

ElementPlus 保留了 Element UI 的整体风格,在官网的设计上也大同小异,但是有心的小伙伴可能发现了 ElementPlus 的官网图是具有动态视差效果的。如文章封面图所示,看起来很是炫酷。

好奇他是如何实现的,我就去看了 它的源码,发现 ElementPlus 的官网首页图的视差效果是用 @vueuse/core 中的 useParallax 实现的。

那么如何使用 useParallax 实现这种视差效果,以及它的原理是什么呢?

什么是视差?

视差是指从两个不同位置观察同一个物体时,此物体在视野中的位置变化与差异。视差使页面富有层次感。使静态的页面活了起来,增强了网页的趣味性。

useParallax

VueUse 的 useParallax 将帮助开发者更加容易的创建视差效果。支持鼠标和方向感应器,也就是说在移动端也是可以创建出这种视差效果的。

如何使用:

首先需要定义一个容器,我们将要创建的视差效果存在这个容器中,以 web 端为例,当我们移动鼠标时,useParallax 会给我们提供旋转以及倾斜角度,然后将这些值,给到容器中元素的变化上去,主要利用 CSS 的 tranform 属性。

import { useParallax } from '@vueuse/core'

export default {
  setup() {
    const container = ref(null)
    const { tilt, roll, source } = useParallax(container)

    return {
      container,
    }
  },
}
  • roll : 旋转角度,取值范围在(-0.5 - 0.5)
  • tilt:倾斜角度, 取值范围在(-0.5 - 0.5)
  • source:传感器源,可以是“鼠标”或“设备方向感应器”

实例

const layer0 = computed(() => ({
  ...layerBase,
  transform: `translateX(${parallax.tilt * 10}px) translateY(${
    parallax.roll * 10
  }px) scale(1.33)`,
}))

layer0 是其中一个元素的样式,在倾斜角度,以及旋转角度变化时,给其赋值,以达到视差的效果。

猫眼2.0:

ElementPlus:

转载自:https://juejin.cn/post/7130592613719261197
评论
请登录