웹 프론트엔드 JS 튜토리얼 필기 모바일 단말기 관성 슬라이딩 및 리바운드 Vue 네비게이션 바 구성 요소 문제(자세한 튜토리얼)

필기 모바일 단말기 관성 슬라이딩 및 리바운드 Vue 네비게이션 바 구성 요소 문제(자세한 튜토리얼)

Jun 01, 2018 am 09:34 AM
슬라이드

얼마전에 모바일 단말기 관성 슬라이딩 & 리바운드 Vue 네비게이션 바 컴포넌트 ly-tab을 작성했는데, 프로젝트 할 때 유용하게 쓸 수 있을 것 같아요. 관심 있는 친구들이 함께 배워보면 좋을 것 같아요

모바일 단말기를 위한 적응형 슬라이딩 Vue 탐색 모음 구성 요소입니다. 실용성이 있고 누구나 사용할 수 있다고 생각합니다(물론 일부 대기업이 스스로 더 잘 작성하면 필요하지 않습니다). 며칠 전에 출시되었으며 npm 및 GitHub로 이동하고, 저를 클릭하여 npm으로 이동하고, 저를 클릭하여 GitHub 프로젝트로 이동하세요. 필요한 학생은 npm install ly-tab -S 또는 에서 code>yarn add ly-tabnpm install ly-tab -S 或者 yarn add ly-tab 使用,具体用法下面会讲到。

好了,先看看效果吧

 

好的,开始废话了,实习差不多3个月了,这段时间跟着导师大佬也有接触过一些项目,也学到了不少东西,接触到的项目基本都是移动端项目,而且框架主要用的是Vue。做过移动端或者用过移动端APP(呸,屁话)的同学肯定会发现很多时候都会有类似上面这种有滑动效果的tab导航栏,相信大家肯定在掘金的首页就看到过。

实现思路

当时的项目中恰好也有这种需求,于是我想偷个懒直接使用 Mint-ui 组件库里现成的tabbar和tab-item组件,github上看了下它的实现源码发现只实现了切换功能但不能滑动,so,懒偷不了就只好自己写咯。

其实单单实现tab切换功能是不难的,看mint-ui使用的其实是v-model语法糖,就像下面这样

<ly-tab v-model="selected">
  <ly-tab-item></ly-tab-item>
</ly-tab>
로그인 후 복사

下面是拆解v-model语法糖的实现

<ly-tab :value="selected" @input="selected = arguments[0]">
  <ly-tab-item></ly-tab-item>
</ly-tab>
로그인 후 복사

然后只需要在tab-item组件内实现当自己被点击时,让其父组件也就是ly-tab组件 $emit 一个 input 事件,并传入一个标识每个tab-item的唯一值作为第一个参数,关于这个唯一值,mint-ui的做法需要用户自己手动给每个tab-item通过props传入一个唯一的id值,如下为Mint UI的Demo实现:

<mt-tabbar v-model="selected">
  <mt-tab-item id="订单">
    <img slot="icon" src="http://placehold.it/100x100">
    <span slot="label">订单</span>
  </mt-tab-item>
 </mt-tabbar>
로그인 후 복사

但是,在看过大佬的 vue当中设计Tabbar插件时的思考 后觉得文章中的那种做法会更好一点,因为对于父组件 来说,只要知道点击的是哪个 <ly-tab-item/> 就行了啊,那么我把每个 <ly-tab-item/> 组件的 index 索引值作为它的唯一标识值不就行了吗。

那么问题来了:怎么在tab-item组件内部取到自己的 index 值呢?

首先ly-tab组件的 $children 是一个数组,由于每个 <ly-tab-item/> 组件是依次创建并通过push的方式插入该数组,所以在每个 <ly-tab-item/> 组件创建并push到 $children 时,对于 <ly-tab-item/> 组件来说 (this.$parent.$children.length || 1) - 1 不就是每个 <ly-tab-item/> 组件唯一的 index 值了啊。实际上,到这里点击切换的功能就已经可以实现了。下面贴上tab-item.vue中的代码:

tab-item.vue

<template>
 <a class="ly-tab-item"
    :style="$parent.value === id ? activeStyle : {}"
    @click="$parent.$emit(&#39;input&#39;, id)">
  <p class="ly-tab-item-icon"><slot name="icon"></slot></p>
  <p class="ly-tab-item-label"><slot></slot></p>
 </a>
</template>
<script>
export default {
 name: &#39;LyTabItem&#39;,
 computed: {
  activeStyle () {
   return {
    color: this.$parent.activeColor,
    borderColor: this.$parent.activeColor,
    borderWidth: this.$parent.lineWidth,
    borderBottomStyle: &#39;solid&#39;
   }
  }
 },
 data () {
  return {
   id: (this.$parent.$children.length || 1) - 1
  }
 }
}
</script>
<style lang="scss">
.ly-tab-item {
 text-decoration: none;
 text-align: center;
 .ly-tab-item-icon {
  margin: 0 auto 5px;
 }
 .ly-tab-item-label {
  margin: 0 auto 10px;
  line-height: 18px;
 }
}
</style>
로그인 후 복사

关于tab.vue中触摸滑动、惯性滑动以及回弹等效果实现在这里就没办法详细讲了,有兴趣的小伙伴可以到github上查看, 点我去github查看项目 ,如果想看示例demo可以clone项目到本地跑一跑,写得不好的地方欢迎大家指正,如果觉得用得着或者能够帮到大家的话最好了,那也不妨点个star吧,哈哈......

哎哎哎,不对不对,怎么就开始求star了,最重要的还没讲呢—— ly-tab怎么使用呢?

如何使用 ly-tab

小伙伴们如果想使用ly-tab,需要在你的项目中通过npm或者yarn下载安装:

npm install ly-tab -S
or
yarn add ly-tab
로그인 후 복사

接着在main.js中全局引入:

import Vue from &#39;vue&#39;;
import LyTab from &#39;ly-tab&#39;;
Vue.use(LyTab);
로그인 후 복사

之后你就可以在你项目中任意使用 <ly-tab></ly-tab> <ly-tab-item></ly-tab-item> 组件而不需要再次引入了

栗子

<ly-tab v-model="selected" fixBottom>
 <!-- selected是你自己定义的一个在data中用于存放当前tab-item的索引值的变量 -->
 <ly-tab-item v-for="(item, index) in tabList" :key="index">
  {{item.itemName}}
 </ly-tab-item>
</ly-tab>
로그인 후 복사

上面的栗子其实只是tabbar的实现,大家项目中肯定还需要做视图区的切换,在这里简单说一下我目前的做法:

  • 使用Vue-router做router-view的切换

  • 使用动态组件(可以配合异步组件使用)

我暂时的话好像只用过这两种,不知道大家还有其他什么更好的方法,欢迎分享~

配置项

可以给 <ly-tab></ly-tab>

자, 먼저 효과를 살펴보겠습니다🎜

🎜🎜자, 헛소리부터 시작하겠습니다. 인턴십을 한 지 거의 3개월이 지났습니다. 그동안 멘토님과 함께 몇 가지 프로젝트를 접했고, 배운 것도 있었습니다. 제가 접한 프로젝트는 기본적으로 모바일 프로젝트이고, 프레임워크는 주로 Vue를 사용합니다. 모바일 장치에서 작업했거나 모바일 앱(아, 헛소리)을 사용해 본 학생들은 위와 같은 슬라이딩 효과가 있는 탭 탐색 모음이 있다는 것을 분명히 Nuggets 홈페이지에서 본 적이 있을 것입니다. . 🎜🎜구현 아이디어🎜🎜당시 프로젝트에서 우연히 이런 수요가 있어서 게을러서 Mint를 사용하고 싶었어요- ui 컴포넌트 직접 라이브러리에 이미 만들어진 tabbar와 tab-item 컴포넌트가 있는데, github에서 구현 소스 코드를 살펴보니 전환 기능만 구현하고 있고 슬라이드가 안 되는 것을 발견했습니다. 직접 작성해야 합니다. 🎜🎜사실 탭 전환 기능을 구현하는 것은 어렵지 않습니다. Mintui는 실제로 아래와 같이 v-model 구문 설탕을 사용합니다🎜rrreee🎜다음은 v-model 구문 설탕 구현을 분해한 것입니다🎜rrreee🎜 그런 다음 탭 항목 구성 요소를 클릭하면 상위 구성 요소인 ly-tab 구성 요소가 $입력 이벤트를 내보내고 각 탭을 식별하는 고유 값을 전달하도록 해야 합니다. item을 첫 번째 매개변수로 사용하려면 mint-ui에서 사용자가 props를 통해 각 탭 항목에 고유한 id 값을 수동으로 전달해야 합니다. 다음은 Mint UI의 데모 구현입니다. 사장님의 뷰를 보고 Tabbar 플러그인을 디자인할 때 고민한 끝에 기사에 나온 접근 방식이 더 좋을 것 같다고 느꼈습니다. 왜냐하면 상위 컴포넌트인 에 대해서는 <ly-tab-item is clicked /> 이면 각 <ly-tab-item/> 구성 요소의 색인 값을 사용할 수 있습니다. 고유한 식별 값으로 사용됩니다. 🎜🎜그러면 질문이 생깁니다. 탭 항목 구성 요소 내에서 자체 색인 값을 얻는 방법은 무엇입니까?🎜🎜우선, ly-tab 구성 요소의 $children 은 각 <이므로 배열입니다. ;ly- tab-item/> 구성 요소는 순차적으로 생성되어 푸시에 의해 배열에 삽입되므로 각 <ly-tab-item/> 구성 요소가 생성되어 $children에 푸시됩니다. , for <ly-tab-item/> 구성 요소의 경우 (this.$parent.$children.length || 1) - 1 은 각 < ly-tab-item /> 구성요소의 고유 인덱스 값입니다. 실제로 클릭-전환 기능은 이미 여기에서 구현될 수 있습니다. 아래 tab-item.vue에 코드를 붙여넣으세요. 🎜🎜tab-item.vue🎜rrreee🎜 tab.vue의 터치 슬라이딩, 관성 슬라이딩 및 리바운드 효과 구현에 대해서는 여기서 자세히 설명할 수 없습니다. 관심이 있는 친구들은 github에서 확인할 수 있습니다. github에서 프로젝트를 확인하려면 저를 클릭하세요. 샘플 데모를 보려면 프로젝트를 로컬로 복제하여 실행할 수 있습니다. 문제가 있으면 수정해 주세요. 유용하거나 도움이 될 수 있다고 생각하시면 별표를 눌러주시면 됩니다. 하하...🎜🎜아니요, 아니, 왜 별표를 요구하시나요? 아직 설명되지 않았습니다. ly-tab을 사용하는 방법은 무엇입니까? 🎜🎜ly-tab 사용 방법🎜🎜ly-tab을 사용하려면 npm을 통과하거나 다운로드하여 설치해야 합니다. Yarn: 🎜rrreee🎜 그런 다음 main.js에 전역적으로 도입합니다. 🎜rrreee🎜 그런 다음 <ly-tab></ly-tab> <ly-tab을 사용할 수 있습니다. -item></ly-tab-item> 컴포넌트를 다시 소개할 필요 없이🎜🎜Chestnut🎜rrreee🎜위의 chestnut은 실제로는 탭바입니다. 프로젝트에서 보기 영역을 전환해야 합니다. 여기서는 현재 접근 방식에 대해 간략하게 설명하겠습니다. 🎜

  • 🎜Vue-router를 라우터 보기 전환으로 사용🎜 li>
  • 🎜동적 구성요소 사용(비동기 구성요소와 함께 사용 가능)🎜
🎜당분간 이 두 가지만 사용한 것 같은데 또 어떤 것이 있는지는 모르겠습니다. 좋은 방법입니다. 공유해 보세요~🎜🎜구성 항목🎜🎜일부 구성 항목을 <ly-tab></ly-tab> 구성 요소에 전달할 수 있습니다. 사용자 정의 원하는 효과를 정의하세요🎜
구성 항목 Type Description 기본값
lineWidth Number fixBottom은 탭바 하단 테두리 너비 1px일 때 false입니다.
activeColor String 활성화 시 글꼴 색상 및 border-bottom-color red
fixBottom Boolean 이 뷰 하단에 고정되는지 여부(false인 경우 슬라이드할 수 없음) false
additionalX Number 경계를 초과할 때 드래그할 수 있는 최대 거리와 대략 같습니다. 50px
reBoundExComponent Number 관성 반발 지수(값이 클수록 진폭이 커질수록 관성 반발 거리가 길어집니다) 10
sensitivity Number 관성 슬라이딩 중 감도(값이 작을수록 저항이 커짐). 손을 놓은 후 속도가 0으로 감소하는 데 필요한 시간으로 근사화할 수 있습니다. 1000ms
reBoundingDuration Number 리바운드 애니메이션 기간 360ms

위 내용은 나중에 도움이 되기를 바랍니다.

관련 기사:

vue 프로젝트에서 axios 교차 도메인 처리를 사용합니다

Vue-cli 프로젝트를 사용하여 로컬 json 파일 데이터 가져오기

패키징 후 JavaScript에서 가져오기 및 요구 사항을 사용하여 원리 분석 구현

위 내용은 필기 모바일 단말기 관성 슬라이딩 및 리바운드 Vue 네비게이션 바 구성 요소 문제(자세한 튜토리얼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

휴대폰 화면이 미끄러지거나 건조해지면 어떻게 해야 하나요? 휴대폰 화면이 미끄러지거나 건조해지면 어떻게 해야 하나요? Dec 04, 2023 pm 03:51 PM

미끄러지거나 건조되기 어려운 휴대폰 화면에 대한 솔루션: 1. 화면을 정기적으로 청소합니다. 3. 손가락의 미끄러짐 강도를 높입니다. 4. 휴대폰 화면 보호 장치를 교체합니다. 6. 손을 촉촉하게 유지하십시오. 7. 필름을 붙일 때 깨끗하게 다루십시오. 8. 윤활제를 사용하십시오. 10. 화면 밝기를 조정하십시오. 자세한 소개: 1. 화면을 가습하고 화면 옆에 가습기를 두거나 물을 뿌려 공기 중 습도를 높여 화면의 건조함을 줄입니다. 2. 화면을 정기적으로 청소하고 전문 화면 세척제를 사용합니다.

JavaScript를 사용하여 이미지의 위아래 슬라이딩 전환 효과를 얻고 페이드인 및 페이드아웃 애니메이션을 추가하는 방법은 무엇입니까? JavaScript를 사용하여 이미지의 위아래 슬라이딩 전환 효과를 얻고 페이드인 및 페이드아웃 애니메이션을 추가하는 방법은 무엇입니까? Oct 20, 2023 am 11:19 AM

JavaScript는 어떻게 이미지의 위아래 슬라이딩 전환 효과를 달성하고 페이드인 및 페이드아웃 애니메이션을 추가할 수 있습니까? 웹 개발에서는 이미지 전환 효과를 구현해야 하는 경우가 많습니다. JavaScript를 사용하여 위아래 슬라이딩 전환을 구현하고 페이드인 및 페이드아웃 애니메이션 효과를 추가할 수 있습니다. 먼저, 여러 이미지를 포함하는 컨테이너가 필요합니다. HTML에서 div 태그를 사용하여 이미지를 호스팅할 수 있습니다. 예를 들어, "image-container"라는 ID를 가진 div를 생성합니다.

HTML, CSS 및 jQuery: 슬라이딩 패널 효과 구현에 대한 기술 가이드 HTML, CSS 및 jQuery: 슬라이딩 패널 효과 구현에 대한 기술 가이드 Oct 27, 2023 pm 04:39 PM

HTML, CSS 및 jQuery: 슬라이딩 패널 효과 구현을 위한 기술 지침 모바일 장치의 인기와 웹 애플리케이션의 개발로 인해 널리 사용되는 상호 작용 방법인 슬라이딩 패널이 웹 디자인에서 점점 더 보편화되고 있습니다. 슬라이딩 패널 효과를 구현함으로써 제한된 공간에 더 많은 콘텐츠를 표시하고 사용자 경험을 향상시킬 수 있습니다. 이 기사에서는 HTML, CSS 및 jQuery를 사용하여 슬라이딩 패널 효과를 얻는 방법을 자세히 소개하고 구체적인 코드 예제를 제공합니다. HTML 구조 먼저 기본 HTML 구조를 만들어야 합니다.

Vue를 사용하여 슬라이딩 캐러셀을 구현하는 방법 Vue를 사용하여 슬라이딩 캐러셀을 구현하는 방법 Nov 07, 2023 pm 12:59 PM

Vue는 대화형 웹 애플리케이션을 보다 쉽게 ​​구축하는 데 도움이 되는 인기 있는 JavaScript 프레임워크입니다. 오늘은 Vue를 사용하여 슬라이딩 캐러셀을 만드는 방법을 소개하겠습니다. VueCLI를 사용하여 새로운 Vue 프로젝트를 생성하고 Vue의 공식 캐러셀 구성 요소를 사용하여 슬라이딩 캐러셀 차트를 구현하겠습니다. 구체적인 단계는 다음과 같습니다. 1단계: VueCLI 설치 VueCLI를 설치하려면 먼저 Node.js를 설치해야 합니다. Node.js를 설치한 후

jQuery 슬라이딩 이벤트 해석: 구현 원칙 및 주의사항 jQuery 슬라이딩 이벤트 해석: 구현 원칙 및 주의사항 Feb 27, 2024 am 10:57 AM

jQuery 슬라이딩 이벤트 해석: 구현 원칙 및 주의 사항 프론트 엔드 개발에서 슬라이딩 이벤트는 일반적으로 사용되는 대화형 작업 중 하나입니다. 슬라이딩 이벤트를 통해 캐러셀 전환 및 페이지 스크롤과 같은 기능을 구현할 수 있습니다. 널리 사용되는 JavaScript 라이브러리인 jQuery는 다양한 대화형 효과를 쉽게 얻을 수 있도록 다양한 슬라이딩 이벤트 처리 방법을 제공합니다. 이 글에서는 jQuery에서 슬라이딩 이벤트의 구현 원리와 주의사항을 자세히 살펴보고 구체적인 코드 예제를 제공합니다. 1. 시행원리

반응으로 슬라이딩을 구현하는 방법 반응으로 슬라이딩을 구현하는 방법 Dec 30, 2022 am 11:09 AM

반응에서 슬라이딩을 구현하는 방법: 1. onTouchStart 이벤트에서 터치를 찾고 식별자에 따라 새로운 터치 발생을 기록합니다. 2. onTouchMove 이벤트의 식별자에 따라 터치가 통과한 각 지점의 좌표를 기록합니다. onTouchEnd 이벤트에서 완료된 터치 이벤트를 찾은 다음 완료된 터치 이벤트가 교차하는 지점을 기준으로 수행할 동작을 계산합니다.

watchOS 10.2: 스와이프로 시계 모드를 변경하는 방법 watchOS 10.2: 스와이프로 시계 모드를 변경하는 방법 Dec 15, 2023 pm 11:15 PM

watchOS 10.2에서는 이전 watchOS 9에서 그랬던 것처럼 살짝 밀기 동작을 활성화하여 Apple Watch 시계 모드 간에 더 쉽게 전환할 수 있습니다. 이 작업이 어떻게 수행되었는지 알아보려면 계속 읽어보세요. Apple Watch를 오랫동안 사용하신 분이라면 간단한 스와이프 동작으로 디스플레이에서 시계 모드를 전환할 수 있었던 시절을 기억하실 것입니다. 이는 watchOS9의 기본 상호 작용이었지만 Apple은 watchOS10으로 업그레이드하면서 이 동작을 제거했습니다. 사용자들이 실수로 시계 모드를 변경하는 것이 너무 쉽다고 불평했기 때문에 Apple은 상호 작용을 변경했습니다. 하지만 이 문제를 겪어본 적이 없는 사람들을 위해 Apple은 이 문제를 더 어렵게 만들었습니다. 스와이프하기 전에 이 작업이 필요합니다.

CSS Flex 탄력적 레이아웃을 사용하여 슬라이딩 카드 레이아웃을 구현하는 방법 CSS Flex 탄력적 레이아웃을 사용하여 슬라이딩 카드 레이아웃을 구현하는 방법 Sep 28, 2023 pm 01:16 PM

CssFlex 유연한 레이아웃을 사용하여 슬라이딩 카드 레이아웃을 구현하는 방법 현대 웹 개발에서는 유연한 레이아웃(Flexbox)이 점점 더 대중화되고 있습니다. 다양하고 복잡한 레이아웃 효과를 쉽게 구현할 수 있는 위치 지정 및 레이아웃 요소용 CSS 모듈입니다. 이 기사에서는 Flex Elastic 레이아웃을 사용하여 슬라이딩 카드 레이아웃을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 슬라이딩 카드 레이아웃은 이미지나 콘텐츠를 표시하는 데 자주 사용되는 일반적인 UI 디자인 패턴입니다. 각 카드는 스와이프하거나 클릭하여 다음 카드로 전환할 수 있습니다.

See all articles