웹 프론트엔드 JS 튜토리얼 ionic3에서 무작위 레이아웃 폭포 흐름을 구현하는 방법

ionic3에서 무작위 레이아웃 폭포 흐름을 구현하는 방법

Jun 14, 2018 pm 05:20 PM
ionic 공들여 나열한 것 폭포 흐름

이 글은 ionic3 실용 튜토리얼에서 랜덤 레이아웃 워터폴 흐름의 구현 방법을 주로 소개합니다. 이 글은 샘플 코드와 그림을 통해 이를 아주 자세하게 소개합니다. 이는 모든 사람의 공부나 업무에 대한 특정 참고 학습 가치를 갖습니다. 아래에서 함께 공부해보세요.

머리말

최근 프로젝트 요구로 인해 ionic3을 접하게 되었는데, 이것이 정말 날카로운 도구라는 것을 알게 되었습니다! ionic 프로젝트는 ionic3에서도 업그레이드된 풍부한 아이콘 라이브러리 세트를 제공합니다.

회사에서 진행하는 프로젝트 중 하나에 폭포수 특수효과가 필요했는데, 한참을 찾아봐도 관련 자료가 없어서 하게 됐어요~

고민도 없이,

그림을 본 학생들은 그 의미를 이해할 것이라고 믿습니다. 응, 폭포야!

하지만 오늘 우리의 폭포는 평범한 폭포가 아닙니다. 계속해서 살펴보겠습니다.

자동 레이아웃

우리의 요구 사항은 무작위적이고 지저분한 느낌을 만드는 것입니다. 따라서 페이지에 표시할 이미지의 최적 배열을 선택하는 메커니즘을 만들어야 합니다.

angular4

이 효과는 일반 JQ 플러그인에서는 구현하기 어렵지 않을 것 같습니다. , 온라인에서 일부 jq 플러그인을 검색할 수도 있습니다. 하지만 우리의 기술 스택은 Angular4입니다~

ng에서는 DOM 작업이 기본적으로 명령어에 배치되어 있습니다. 저는Angularjs1.x를 사용해 본 학생들이 이에 익숙하다고 믿습니다~, Angle4에서도 마찬가지입니다.

좋아, 코드를 올려보자~

지시문 만들기

이미 ionic에 관련 구성 요소를 설정하고 이미 이미지 데이터가 있다고 가정합니다. 관련 근거가 없으면 내 반 친구들이 제안합니다. 먼저 ionic3 및 angle4에 대한 소개를 살펴보세요.

이것은 내 구성요소 HTML 페이지 중 하나입니다. 아마도 눈썰미가 있는 학생들이 우리 명령인 [imagr-sort]="item"을 발견했을 것입니다. 예, 우리 명령에는 현재 이미지의 각도 데이터가 필요합니다.

ts

ionic g directive image-sort 명령을 생성하여 우리를 생성한 명령을 실행합니다. ionic g directive image-sort执行建立我们的指令。

创建完了我们的自定义指令就是这个样子,空空如也啊~

编写我们的逻辑

1.1接收并且注入一些东西:

看图!

既然我们在模板中有输入([[imagr-sort]="item"]);那么我们也当然应该在指令中接收到输入的数据;如截图中红色箭头所示,我将输入的数据保存了起来->sourceArr;

然后我们在angular4中如果要获取到dom宿主的一些属性了,元素了等等就要用到ElementRef,Renderer2是angular4中的一个类似渲染器的东西吧,这个具体的我还没有搞懂,大家可以多看看这块的资料,我主要是在这个指令中用于更改Dom的一些结构。

关于我们的imgLength ,我待会再说

1.2实际点!图片是从异步加载过来的!

我们首先思考这样一个问题:

我们的指令是在angular数据渲染的时候就开始执行的,这个是基本大家都懂。

but!我们的图片可都是异步加载的呢~,所以自然而然我们要有一个图片加载的过程:

嗯,相信各位早就想到了---->image.onload

사용자 정의 지침을 만든 후, 이것이 다입니다. 아무 것도 아닌 것 같습니다~🎜🎜🎜🎜로직 작성🎜🎜🎜🎜🎜1.1은 무언가를 수신하고 주입합니다.🎜🎜🎜그림을 보세요! 🎜🎜🎜🎜템플릿에 입력이 있으므로([[imagr-sort]="item"]); 그런 다음 스크린샷에 빨간색 화살표로 표시된 것처럼 명령에서 입력 데이터를 받아야 합니다. 입력 데이터를 저장했습니다. > sourceArr;🎜🎜Angular4에서 DOM 호스트, 요소 등의 일부 속성을 얻으려면 ElementRef를 사용해야 합니다. Renderer2는 Angle4의 렌더러와 유사한 것입니다. 이 정보에 대한 자세한 내용을 읽을 수 있습니다. 나는 주로 Dom의 일부 구조를 변경하기 위해 이 명령을 사용합니다. 🎜🎜저희 imgLength에 대해서는 나중에 얘기하겠습니다🎜🎜🎜1.2 실용적인 포인트! 그림이 비동기적으로 로드됩니다! 🎜🎜🎜먼저 이 질문에 대해 생각해 봅시다: 🎜🎜우리의 명령은 각도 데이터가 렌더링될 때 실행되기 시작합니다. 이는 기본적으로 모든 사람이 이해합니다. 🎜🎜하지만! 이미지는 모두 비동기식으로 로드되므로 당연히 이미지 로드 프로세스가 필요합니다.🎜🎜🎜🎜글쎄, 이미 생각해 보셨을 거라 믿습니다--->image.onload, 네, 바로 그거예요~🎜🎜이제 이야기할 시간입니다 이전 imgLength는 완료된 이미지 수를 기록하는 데 사용됩니다. 이는 현재 이미지가 로드되었는지 식별하고 후속 작업의 기초를 제공하는 데 사용됩니다. 🎜

image.onerror, 이는 이미지 로드에 실패한 함수입니다. 제가 하는 작업은 원래 DOM인 Angle 데이터에서 로드에 실패한 이미지를 제거하는 것입니다. 도태. image.onerror,这个相信大家也看明白了吧,这个是图片加载失败的一个函数,我在里面做的操作是将加载失败的图片从原始的DOM中,angular的数据剔除。

这里面就用到了我们angular的渲染器this.render2();

相关功能方法大家可以去源码里面看一下,基本上所有常用的Dom操作都有实现。

for循环呢是因为我们的图片数据是多条的,所以我们要等待每一张图片都顺利的加载完成。

ps:注意在onerror与onload的函数中使用this要在imgOnlod中使用变量引用let _self = this;

图片加载完成开始我们的改造工程

1.3将我们的适口按照网格划分

imageStartStort()!

上图

大家看1图红圈内,我是自己划分出五个横向网格标准,便于我们待会将图片比例做对比。

1.4将我们的图片定义网格占用

我们创建了一个数组allImageArr=[];用于保存当前处理过的所有图片的数据。

还记的我们之前获得的angular的数据吧,我们通过循环它来将图片划分网格占用。

我们的循环中都做了些什么?

      1.图片的宽高,并且求出每一张图片的比例。

      2.将获得的图片比列与我们自己定义的网格比例进行区间划分。

      3.按照我们划分的网格来计算出占有网格的图片的新的宽度,所占网格数储存并且记录保存到我们的自定义的allImageArr中,并且在原有的angular数据中添加gridding数字那个记录相应的网格数。

执行this.pictureColumnSort

Angular 렌더러 this.render2();가 사용됩니다.

관련 함수 및 메서드에 대한 소스 코드를 확인할 수 있습니다. 기본적으로 일반적으로 사용되는 모든 Dom 작업이 구현됩니다.

for 루프는 여러 개의 이미지 데이터가 있기 때문에 각 이미지가 원활하게 로드될 때까지 기다려야 합니다.

ps:

onerror 및 onload 함수에서 이것을 사용할 때 imgOnlod let _self = this; <p></p> <span style="color: #ff0000"><p style="text-align: center">이미지 로딩이 완료되고 리노베이션 프로젝트를 시작합니다<img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/008/809465bc9b72810e0dbad820490f8954-10.jpg" class="lazy" alt="" style="max-width:90%" style="max-width:90%"></p></span><p></p>1.3 그리드에 따라 입맛을 나눕니다<p></p> <p>imageStartStort() ! </p> <p>위 사진</p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/008/809465bc9b72810e0dbad820490f8954-11.jpg" class="lazy" alt="" style="max-width:90%" style="max-width:90%"></p> <p>사진 1의 빨간색 원을 보세요. 나중에 사진 비율을 비교할 수 있도록 가로 격자 기준을 5개로 직접 나누어 놓았습니다. <strong></strong></p>1.4 이미지 정의 그리드를 차지하세요<p></p> <p style="text-align: center"><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/008/809465bc9b72810e0dbad820490f8954-11.jpg" class="lazy" alt="" style="max-width:90%" style="max-width:90%"><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/008/809465bc9b72810e0dbad820490f8954-11.jpg" class="lazy" alt=""></p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/008/42ef2f10a5f891a9ffdfdf7fddacb419-9" class="lazy" alt=""><p> <br> 현재 처리된 모든 이미지의 데이터를 저장하기 위해 allImageArr=[]; 배열을 만들었습니다. </p> <p>이전에 얻은 각도 데이터를 기억하고 이미지를 반복하여 그리드로 나눕니다. </p> <p>우리 루프에서는 무엇을 하나요? </p> <p> 1. 사진의 너비와 높이, 그리고 각 사진의 비율을 찾아보세요. <strong></strong> 2. 획득한 이미지 비율을 자체 정의된 그리드 비율에 따라 간격으로 나눕니다. </p> <p> 3. 우리가 나눈 그리드에 따라 그리드를 차지하는 이미지의 새로운 너비를 계산하고, 점유된 그리드 수를 저장하고 이를 사용자 정의 allImageArr에 기록하고, 원래 각도 데이터에 그리드를 추가합니다. 숫자는 해당 그리드 번호를 기록합니다. . </p> <p style="text-align: center"><code>this.pictureColumnSort 메소드를 실행하세요

다음으로 열정의 순간을 가져보세요~

1.5 사진 정렬, 그리드에 따라 가장 적합한 것을 선택하세요. ~

pictureColumnSort()!

위 그림

사실 이 과정에 대해서는 별로 할 말이 없습니다. 적합한 것을 인접하게 실행하고(다음 단계: goExchange 기능 실행) 마지막으로 일치하지 않는 것에 대해 별도의 5포인트 그리드 전략을 만듭니다.

🎜형식은 여러 개일 수 있습니다: 🎜🎜3+2, 1+4, 1+1 +3, 1+3 +1,2+3.. . . . . 🎜🎜왜 이렇게 행복해요~🎜🎜말할 것도 없고 필터링만 하고 사진만 보세요. 🎜🎜🎜1.6 무질서에서 주문으로의 변화. 교환 외에는 더 좋은 선택이 없어야 합니다. 🎜🎜🎜goExchange()! 위의 그림 🎜🎜🎜🎜🎜1.5의 코드를 보면 매번 이 기능을 실행합니다. 왜냐하면 일치하는 사진의 위치를 ​​변경해야 하기 때문입니다! 🎜이 함수에서 받은 RepeatI와 RepeatA는 1.5의 이중 루프의 인덱스입니다. 이 인덱스는 그림을 변경하는 위치를 결정합니다. 🎜🎜코드에 표시된 원리는 현재 이미지 뒤에 있는 일치하는 이미지를 교체하고, 교체된 이미지 위치에 그 뒤에 있는 원본 이미지를 추가하는 것입니다. 약간 혼란스럽고 제 게임 실력이 부족해서일 수도 있습니다. 하하. . 🎜🎜이 기능에 대해서는 더 말할 것도 없고 단지 위치만 변경하는 것뿐입니다. 🎜🎜🎜1.7 서로의 장점을 배워 작품을 완성해보세요! 🎜🎜🎜setHeight()! 위 그림은 🎜🎜🎜🎜🎜 다시 반복됩니다. (코드는 여전히 많이 개선되어야 하며, 반복문이 많이 사용됩니다~) 🎜🎜이 시점에서 레이아웃 페이지가 완성되었습니다. 그런데 저희는 사실 사진의 크기가 불규칙해서 보기 힘들 정도거든요. 🎜그래서 이 기능의 차이점을 보완하고 서로의 장점을 배워나가고 있어요. 🎜🎜사실 저희 사진은 확실히 조금 늘어나기 때문에 저희도 균형잡힌 중간점을 잡아서 적절한 스트레칭을 하고 있습니다. 🎜🎜이 기능은 이미지 크기 조정을 개선하기 위해 몇 가지 적절한 제한을 확실히 적용할 수 있습니다. 이 시점에서 우리는 전체 명령 논리 작성을 마쳤습니다. 🎜🎜ioinc 서브🎜🎜🎜🎜 완료!

중간 호출 과정에 대해 설명드리고 싶은 것이 하나 있습니다:

setTimeout(() => {
  _self.setHeight(angularImageList, ele);
  });
로그인 후 복사

저는 야간 근무에 무기력할 때만 전체 호출을 사용했습니다. 전체 통화를 하면 데이터가 설명할 수 없을 정도로 사진 위치에 나타납니다. 교체 오류, 지금까지의 오해, 전문가가 전체 솔루션을 볼 수 있다면 공유해 주세요.

위 내용은 제가 여러분을 위해 정리한 내용입니다. 앞으로 도움이 되길 바랍니다.

관련 기사:

vue에서 메소드 간 호출을 구현하는 방법

vux 풀업 새로 고침 기능을 구현하는 방법

jQuery에서 이미지 캐러셀을 구현하는 방법

위 내용은 ionic3에서 무작위 레이아웃 폭포 흐름을 구현하는 방법의 상세 내용입니다. 자세한 내용은 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 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Windows 11: 시작 레이아웃을 가져오고 내보내는 쉬운 방법 Windows 11: 시작 레이아웃을 가져오고 내보내는 쉬운 방법 Aug 22, 2023 am 10:13 AM

Windows 11에서는 시작 메뉴가 다시 디자인되었으며 시작 메뉴에 폴더, 앱 및 앱이 있었던 이전 버전과 달리 페이지 그리드에 배열된 단순화된 앱 세트를 제공합니다. 시작 메뉴 레이아웃을 사용자 정의하고 다른 Windows 장치로 가져오거나 내보내 원하는 대로 개인화할 수 있습니다. 이 가이드에서는 Windows 11에서 기본 레이아웃을 사용자 지정하기 위해 시작 레이아웃을 가져오는 단계별 지침을 설명합니다. Windows 11의 Import-StartLayout이란 무엇입니까? 시작 레이아웃 가져오기는 Windows 10 및 이전 버전에서 시작 메뉴에 대한 사용자 지정을 가져오기 위해 사용되는 cmdlet입니다.

Windows 11에서 바탕 화면 아이콘 위치 레이아웃을 저장하는 방법 Windows 11에서 바탕 화면 아이콘 위치 레이아웃을 저장하는 방법 Aug 23, 2023 pm 09:53 PM

Windows 11은 사용자 경험 측면에서 많은 것을 제공하지만 반복이 완전히 오류로부터 안전한 것은 아닙니다. 사용자는 때때로 문제에 직면하며 아이콘 위치 변경이 일반적입니다. 그렇다면 Windows 11에서 데스크톱 레이아웃을 저장하는 방법은 무엇입니까? 현재 창의 화면 해상도를 저장하든 데스크탑 아이콘 배열을 저장하든 관계없이 이 작업을 위한 내장 솔루션과 타사 솔루션이 있습니다. 이는 데스크탑에 많은 아이콘이 있는 사용자에게 더욱 중요해집니다. Windows 11에서 바탕 화면 아이콘 위치를 저장하는 방법을 알아보려면 계속 읽어보세요. Windows 11에서 아이콘 레이아웃 위치를 저장하지 않는 이유는 무엇입니까? Windows 11이 바탕 화면 아이콘 레이아웃을 저장하지 않는 주요 이유는 다음과 같습니다. 디스플레이 설정 변경: 일반적으로 디스플레이 설정을 수정하면 구성된 사용자 지정이

WordPress 웹 페이지 정렬 문제 해결 가이드 WordPress 웹 페이지 정렬 문제 해결 가이드 Mar 05, 2024 pm 01:12 PM

잘못 정렬된 WordPress 웹 페이지 해결 가이드 WordPress 웹 사이트 개발 시 때로는 웹 페이지 요소가 잘못 정렬되는 경우가 있습니다. 이는 다양한 장치의 화면 크기, 브라우저 호환성 또는 부적절한 CSS 스타일 설정 때문일 수 있습니다. 이러한 잘못된 정렬을 해결하려면 문제를 주의 깊게 분석하고, 가능한 원인을 찾아 단계별로 디버그하고 복구해야 합니다. 이 문서에서는 몇 가지 일반적인 WordPress 웹 페이지 정렬 문제와 해당 솔루션을 공유하고 개발에 도움이 되는 특정 코드 예제를 제공합니다.

HTML과 CSS를 사용하여 반응형 캐러셀 레이아웃을 만드는 방법 HTML과 CSS를 사용하여 반응형 캐러셀 레이아웃을 만드는 방법 Oct 20, 2023 pm 04:24 PM

HTML 및 CSS를 사용하여 반응형 회전판 레이아웃을 만드는 방법 회전판은 현대 웹 디자인의 일반적인 요소입니다. 사용자의 관심을 끌고, 여러 콘텐츠나 이미지를 표시하고, 자동으로 전환할 수 있습니다. 이 글에서는 HTML과 CSS를 사용하여 반응형 캐러셀 레이아웃을 만드는 방법을 소개합니다. 먼저 기본 HTML 구조를 만들고 필요한 CSS 스타일을 추가해야 합니다. 다음은 간단한 HTML 구조입니다: &lt;!DOCTYPEhtml&g

win7의 창 배치 방법 소개 win7의 창 배치 방법 소개 Dec 26, 2023 pm 04:37 PM

동시에 여러 창을 열 때 win7에는 여러 창을 서로 다른 방식으로 배열한 다음 동시에 표시하는 기능이 있어 각 창의 내용을 더 명확하게 볼 수 있습니다. 그렇다면 win7에는 몇 개의 창 배열이 있나요? 편집기를 통해 살펴보겠습니다. Windows 7 창을 정렬하는 방법에는 여러 가지가 있습니다. 세 가지, 즉 계단식 창, 스택형 디스플레이 창, 병렬 디스플레이 창입니다. 여러 창을 열 때 작업 표시줄의 빈 공간을 마우스 오른쪽 버튼으로 클릭하면 됩니다. 세 가지 창 배열을 볼 수 있습니다. 1. 계단식 창: 2. 누적형 디스플레이 창: 3. 나란히 표시되는 창:

CSS에 포함된 구문 사용 시나리오 CSS에 포함된 구문 사용 시나리오 Feb 21, 2024 pm 02:00 PM

CSS에서 포함의 구문 사용 시나리오 CSS에서 포함은 요소의 콘텐츠가 외부 스타일 및 레이아웃과 독립적인지 여부를 지정하는 유용한 속성입니다. 이는 개발자가 페이지 레이아웃을 더 잘 제어하고 성능을 최적화하는 데 도움이 됩니다. 이 문서에서는 포함 특성의 구문 사용 시나리오를 소개하고 특정 코드 예제를 제공합니다. 포함 속성의 구문은 다음과 같습니다: contain:layout|paint|size|style|'none'|'stric

H5의 위치 속성의 유연한 적용 기술 H5의 위치 속성의 유연한 적용 기술 Dec 27, 2023 pm 01:05 PM

H5에서 위치 속성을 유연하게 사용하는 방법 H5 개발에서는 요소의 위치 지정 및 레이아웃이 관련되는 경우가 많습니다. 이때 CSS 위치 속성이 작동하게 됩니다. 위치 속성은 상대 위치 지정, 절대 위치 지정, 고정 위치 지정 및 고정 위치 지정을 포함하여 페이지에서 요소의 위치 지정을 제어할 수 있습니다. 이번 글에서는 H5 개발에서 position 속성을 유연하게 활용하는 방법을 자세히 소개하겠습니다.

HTML과 CSS를 사용하여 반응형 이미지 갤러리 디스플레이 레이아웃을 만드는 방법 HTML과 CSS를 사용하여 반응형 이미지 갤러리 디스플레이 레이아웃을 만드는 방법 Oct 18, 2023 am 09:40 AM

HTML과 CSS를 사용하여 반응형 사진 갤러리 디스플레이 레이아웃을 만드는 방법 오늘날의 인터넷 시대에 사진 갤러리 디스플레이는 다양한 사진과 이미지 작품을 표시할 수 있는 웹 디자인의 일반적인 레이아웃입니다. 사용자가 다양한 기기에서 좋은 브라우징 경험을 누릴 수 있도록 반응형 디자인이 점점 더 중요해지고 있습니다. 이 문서에서는 HTML과 CSS를 사용하여 반응형 이미지 갤러리 디스플레이 레이아웃을 만드는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1단계: 기본 HTML 구조 만들기 먼저 기본 HTM을 만들어야 합니다.

See all articles