>  기사  >  웹 프론트엔드  >  유니앱 키보드가 축소되었을 때 애니메이션 효과가 없으면 어떻게 해야 하나요?

유니앱 키보드가 축소되었을 때 애니메이션 효과가 없으면 어떻게 해야 하나요?

PHPz
PHPz원래의
2023-04-18 15:19:33899검색

모바일 장치의 인기와 모바일 애플리케이션 시장의 성장으로 인해 개발자는 크로스 플랫폼 프레임워크를 사용하여 애플리케이션을 개발하는 방법을 점점 더 많이 배우고 있습니다. Uniapp은 인기 있는 크로스 플랫폼 개발 프레임워크입니다. Uniapp은 Vue.js를 기반으로 개발되었으며 개발자의 개발 및 디버그를 용이하게 하는 일련의 플러그인 및 구성 요소를 제공합니다.

그러나 Uniapp 애플리케이션을 개발할 때 일부 개발자는 문제를 발견했습니다. 입력 상자에 포커스가 맞춰지고 키보드가 팝업된 후 특히 Android 기기에서 키보드가 축소되면 애니메이션 효과가 없습니다. 이 문제는 사용자 경험에 영향을 미칠 수 있습니다. 다음은 몇 가지 해결 방법입니다.

1. vue-router에서 공식적으로 제공하는 전환을 사용하세요.

vue-router는 라우팅 전환 효과를 얻기 위해 전환을 제공하는 Vue.js에서 공식적으로 제공하는 라우팅 관리 도구입니다. Uniapp에서는 vue-router의 전환을 사용하여 키보드가 축소될 때 애니메이션 효과를 얻을 수 있습니다.

구체적인 구현 방법은 다음과 같습니다.

  1. App.vue에 다음 코드를 추가합니다.
<template>
  <div id="app">
    <transition name="fade">
      <router-view/>
    </transition>
  </div>
</template>

<script>
export default {
  name: 'App',
  components: {},
  methods: {},
}
</script>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  opacity: 0;
}
</style>
  1. 팝업 레이어 등 애니메이션 효과를 구현해야 하는 경우 스타일에 다음 코드를 추가합니다. 구성 요소의 태그:
.slide-up-enter-active, .slide-up-leave-active {
  transition: all .3s cubic-bezier(.55,0,.1,1);
}
.slide-up-enter, .slide-up-leave-to {
  transform: translateY(100%);
  opacity: 0;
}

위 코드에서

  • fade-enter-active: fade-enter-active:表示进入时的动画效果
  • fade-leave-active:表示离开时的动画效果
  • fade-enter:进入时的初始状态
  • fade-leave-to:离开时的最终状态

该方法的优点是使用简单,且可以自定义动画效果,但需要多次编写transition代码来使页面动画生效,可能存在代码冗余的问题。

二、调用系统API

我们可以使用uni-app提供的API来调用系统键盘的监听事件,从而实现键盘弹出、收缩时的动画效果。

实现方法如下:

  1. 在需要实现动画效果的页面,可以在onLoad或onShow生命周期中添加以下代码:
onLoad() {
  uni.onKeyboardHeightChange((res) => {
    if(res.height > 0){
      //键盘弹出时
      this.isShowKey = true;
      this.keyHeight = res.height;
    } else {
      //键盘收回时
      this.isShowKey = false;
    }
  });
},

以上代码中,uni.onKeyboardHeightChange方法可以在键盘高度发生变化时监听到,并触发回调函数。如果键盘的高度大于0,则判断为键盘弹出,此时给相应的DOM元素添加样式进行动画;如果键盘的高度为0,则判断为键盘收回,此时取消DOM元素的动画效果。

  1. 在相应的DOM元素的style标签中添加以下代码:
<input class="input" type="text" 
style="transform: translate3d(0, {{isShowKey ? -(keyHeight - 68)+&#39;px&#39; : &#39;0&#39;}}, 0);"
/>

以上代码中,

  • transform: translate3d():表示改变元素的位置
  • isShowKey:表示键盘是否弹出,为true则表示弹出
  • keyHeight-68+'px':表示键盘的高度减去屏幕底部操作栏的高度,再在原基础上向上平移
  • 0:表示元素初始状态下的位置

该方法的优点是使用简单,无需引用第三方插件,但键盘收回时的动画效果可能不够流畅。

三、使用第三方插件

我们还可以使用一些第三方插件来达到动画效果的目的,比如uview-ui中的uni-transition组件等。

实现方法如下:

  1. 下载并引用uview-ui框架。
  2. 在需要实现动画效果的页面中,添加以下代码:
<uni-transition :name="&#39;fade&#39;">
  <div v-show="showContent" class="content">
    //...
  </div>
</uni-transition>

以上代码中,uni-transition组件可包裹需要添加动画效果的组件,通过:name属性来指定动画类型。v-show指令表示在需要时显示组件。

  1. 在style标签中添加以下代码:
.fade-enter-active, .fade-leave-active {
  transition: opacity .5s;
}
.fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
  opacity: 0;
}

以上代码中:

  • fade-enter-active:表示进入时的动画效果
  • fade-leave-active:表示离开时的动画效果
  • fade-enter:进入时的初始状态
  • fade-leave-to
  • fade-leave-active 입력 시 애니메이션 효과를 나타냅니다. : 나갈 때 애니메이션 효과를 나타냅니다.

fade-enter: 들어갈 때의 초기 상태

fade-leave-to: 나갈 때의 최종 상태

🎜🎜장점 이 방법의 장점은 사용이 간편하고 애니메이션 효과를 사용자 정의할 수 있지만 페이지 애니메이션을 적용하려면 전환 코드를 여러 번 작성해야 하므로 코드 중복이 발생할 수 있다는 점입니다. 🎜🎜2. 시스템 API 호출🎜🎜uni-app에서 제공하는 API를 사용하여 시스템 키보드의 청취 이벤트를 호출하여 키보드가 팝업되고 축소될 때 애니메이션 효과를 얻을 수 있습니다. 🎜🎜구현 방법은 다음과 같습니다. 🎜🎜🎜애니메이션 효과를 구현해야 하는 페이지에서 onLoad 또는 onShow 라이프 사이클에 다음 코드를 추가할 수 있습니다. 🎜🎜rrreee🎜위 코드에서 uni .onKeyboardHeightChange 메소드는 키보드 높이가 변경될 때를 감지하고 콜백 함수를 트리거할 수 있습니다. 키보드의 높이가 0보다 크면 키보드가 튀어나온 것으로 판단하고, 애니메이션용 해당 DOM 요소에 스타일을 추가하면 키보드의 높이가 0이면 키보드가 들어간 것으로 판단합니다. , DOM 요소의 애니메이션 효과가 취소됩니다. 🎜🎜🎜해당 DOM 요소의 스타일 태그에 다음 코드를 추가하세요. 🎜🎜rrreee🎜위 코드에서 🎜🎜🎜transform:transform3d(): 요소의 위치 변경을 의미합니다🎜 🎜 isShowKey: 키보드가 팝업되는지 여부를 나타냅니다. true인 경우 키보드가 팝업된다는 의미입니다. keyHeight-68+'px': 키보드의 높이를 뺀 값을 나타냅니다. 화면 하단의 작업 표시줄 높이를 조정한 다음 원래 값을 기준으로 Pan up 🎜🎜0: 초기 상태의 요소 위치를 나타냅니다🎜🎜🎜의 장점 이 방법은 사용이 간편하고 타사 플러그인을 사용할 필요가 없지만 키보드를 접을 때 애니메이션 효과가 충분히 부드럽지 않을 수 있다는 점입니다. 🎜🎜3. 타사 플러그인 사용🎜🎜 또한 일부 타사 플러그인을 사용하여 uview-ui의 단일 전환 구성 요소 등 애니메이션 효과를 얻을 수도 있습니다. 🎜🎜구현 방법은 다음과 같습니다. 🎜🎜🎜uview-ui 프레임워크를 다운로드하여 참조하세요. 🎜🎜애니메이션 효과를 구현해야 하는 페이지에 다음 코드를 추가합니다. 🎜🎜rrreee🎜위 코드에서 uni-transition 구성 요소는 애니메이션이 필요한 구성 요소를 다음과 같이 래핑할 수 있습니다. :name 속성을 ​​사용하여 애니메이션 유형을 지정합니다. <code>v-show 지시문은 필요할 때 구성요소를 표시한다는 의미입니다. 🎜
    🎜스타일 태그에 다음 코드를 추가하세요: 🎜🎜rrreee🎜위 코드에서: 🎜🎜🎜fade-enter-active: 진입 시 애니메이션 효과를 나타냅니다. 🎜🎜 fade-leave-active: 나갈 때 애니메이션 효과를 나타냅니다.🎜🎜fade-enter: 들어갈 때 초기 상태🎜🎜fade-leave-to: 나갈 때의 최종 상태🎜🎜🎜이 방법의 장점은 사용이 간편하고 애니메이션 효과를 맞춤 설정할 수 있다는 점이지만, 타사 플러그인을 도입해야 하므로 크기가 커질 수 있습니다. 프로젝트. 🎜🎜위의 방법은 Uniapp 키보드가 축소될 때 애니메이션 효과가 발생하지 않는 문제를 해결하는 세 가지 방법입니다. 개발자는 자신의 프로젝트 요구에 따라 적절한 방법을 선택할 수 있습니다. vue-router의 전환을 사용하든, 시스템 API를 호출하여 애니메이션 효과를 얻든, 타사 플러그인을 사용하든, 핵심은 사용자 경험을 개선하고 애플리케이션 품질을 향상시키기 위해 특정 상황을 기반으로 솔루션을 공식화하는 것입니다. 🎜

위 내용은 유니앱 키보드가 축소되었을 때 애니메이션 효과가 없으면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.