찾다
웹 프론트엔드CSS 튜토리얼Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다.

이 글에서는 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현하기 위한 플렉스 레이아웃을 소개합니다. 필요한 친구가 참고할 수 있기를 바랍니다.

오늘은 프로젝트의 세부 사항을 살펴보고 모든 그래픽 커터가 극복할 수 없는 장애물에 대해 이야기하겠습니다. 이는 jser가 직면해야 하는 일반적인 작업이기도 합니다. "NetEase Cloud Music을 위한 재사용 가능성이 높은 반응형 캐러셀 그래픽 구현" 》

모든 사람의 작업에 비하면 회전목마 사진은 여자친구 집에 첫 여행을 갈 때의 준비 작업과도 같아서 지나칠 수 없습니다. 불행하게도 대부분의 사람들은 처음으로 부모님을 만나는 것처럼, 경험이 거의 없는 회전목마 사진을 씁니다.

많은 사람들이 캐러셀 세트를 직접 작성하고 향후 작업에서 이를 계속 개선하여 마침내 자신만의 플러그인 라이브러리를 만들고 싶어합니다. 불행하게도 이 아이디어를 가진 대부분의 사람들은 조치를 취한 후에야 알게 됩니다. 그들은 그것을 깨닫고 싶어합니다. “결혼하면 아파트를 사겠다”는 약속을 이행하는 것보다 더 어렵습니다. 결국 프로젝트 부담과 제 실력으로 인해 플러그인 포터가 될 수밖에 없었습니다.

하지만 플러그인 포터에는 세 가지 문제가 있습니다. 우선, 이것은 사람의 기술적인 성장에 아무런 도움이 되지 않으며, 둘째, 이것이 또한 플러그인이 프로젝트를 완전히 충족시키지 못한다는 것입니다. 이상한 버그가 발생하면 운명에 맡기고 더 적합한 플러그인을 찾기 위해 느린 여정을 계속할 수밖에 없습니다. 마지막으로, 일부 플러그인은 무겁고 부풀어오르지만 필요한 것은 가장 기본적인 캐러셀 기능뿐입니다. 식초 한 접시를 먹기 위해 만두를 만들겠습니까? 나는 그렇게 생각하지 않습니다. 그렇다면 단지 캐러셀을 사용하기 위해 프로젝트에서 수백 K, 심지어 M 플러그인을 사용하는 이유는 무엇입니까?

많은 사람들이 작성 방법을 모르기 때문이라고 말할 수도 있습니다. 오늘은 플러그인만 찾으면 js의 세계가 너무 간단하고 아름답다는 것을 알게 될 것입니다. 8개의 플러그인을 개발할 수 있습니다.

Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다.

위를 보세요, 캐러셀 사진이 무엇인지는 모두가 알고 있습니다. 첫 번째 단계에서 해야 할 일을 자세히 살펴보세요. 적어도 빨간색이라도 뭔가를 드래그할 수 있어야 합니다. 정사각형. 여기서 드래그에 대해 이야기해야 합니다. 드래그는 왼쪽 및 위쪽 값만 변경합니다(외계인만 오른쪽 및 아래쪽 값을 변경합니다. 우리 지구인은 일반적으로 왼쪽과 위쪽을 사용합니다. 이유는 묻지 마세요). 한 방향으로 움직여 보세요.

nbsp;html>


    <meta>
    <meta>
    <meta>
    <title>Document</title>
    <style>
        #p1 {
            width: 100px;
            height: 100px;
            position: absolute;
            left: 50px;
            top: 50px;
            background: red;
        }
    </style>
    <script>
        document.addEventListener("DOMContentLoaded", function () {
            var op = document.getElementById(&#39;p1&#39;);

            var disX = 0;
            op.addEventListener("touchstart", function (e) {
                var startPoint = e.changedTouches[0].pageX;
                var startLeft = op.offsetLeft;
                disX = startPoint - startLeft;
            });

            op.addEventListener("touchmove", doMove,false);
            function doMove(e) {
                var currPoint = e.changedTouches[0].pageX;
                var newLeft  = currPoint - disX;
                op.style.left = newLeft +&#39;px&#39;;
            }
            function doUp(e) {
                var currPoint = e.changedTouches[0].pageX;
                var newLeft  = currPoint - disX;
                op.style.left = newLeft +&#39;px&#39;;
                op.removeEventListener("touchmove", doUp,false);
                op.removeEventListener("touchend", doUp,false);
            }
            op.addEventListener("touchend", doUp,false);
        }, false);
    </script>


    <p></p>

자세히 보세요. 모바일 이벤트를 사용하는 것뿐입니다. 몇 분 안에 이해할 수 있습니다. 문제는 많은 학생들이 선생님, 여기가 이해가 안 돼요,

 var currPoint = e.changedTouches[0].pageX;
 var newLeft  = currPoint - disX;
 op.style.left = newLeft +'px';

이게 뭐예요?라고 말할 것입니다.

var currPoint = e.changedTouches[0].pageX;
var newLeft  = currPoint - disX;
op.style.left = newLeft +'px';
op.addEventListener("touchmove", doUp,false);
op.addEventListener("touchend", doUp,false);

사실 이게 핵심 내용입니다. 간단히 말하면, 아주 간단한 그림인데, 한 눈에 알 수 있습니다.

Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다.

사실 파란색 선의 거리를 계산한다는 뜻인데 파란색 선만 맞으면 위치가 틀리지 않으니 정말 이해가 안 되셔도 괜찮습니다. 공식으로 외우는 것이 잘못되었습니다. 이러한 기본 지식만 있으면 다루기 쉽고, 선반을 설치하고,

nbsp;html>



    <meta>
    <meta>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        li {
            list-style: none;
        }

        .swiper-container {
            width: 320px;
            height: 130px;
            position: relative;
            margin: 20px auto;
            overflow: hidden;
        }

        .swiper-container .swiper-wrapper {
            width: 2240px;
            height: 130px;
            position: absolute;
            left: 0px;
        }

        .swiper-container .swiper-wrapper img {
            width: 320px;
            height: 130px;
            float: left;
            display: block;
        }

        .swiper-container ul {
            width: 35px;
            height: 4px;
            position: absolute;
            bottom: 10px;
            left: 50%;
            margin-left: -15px;
        }

        .swiper-container ul li {
            width: 4px;
            height: 4px;
            border-radius: 2px;
            border: 0.25px solid #fff;
            margin-left: 2.5px;
            background: #666;
            float: left;
            cursor: pointer;
        }

        .swiper-container ul .active {
            background: #fff;
        }

        .swiper-container ul li:hover {
            background: #fff;
        }
    </style>



    <p>
        </p><p>
            <img  src="/static/imghwm/default1.png" data-src="images/4.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/0.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/1.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/2.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/3.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/4.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/0.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
        </p>
        
                
  •             
  •             
  •             
  •             
  •         
         <script> document.addEventListener("DOMContentLoaded", function () { var oSWiperContainer = document.querySelector(".swiper-container"); var oSWiperWrapper = document.querySelector(".swiper-container .swiper-wrapper"); var aImg = document.querySelectorAll(".swiper-container .swiper-wrapper img") var aLi = document.querySelectorAll(".swiper-container ul li"); oSWiperContainer.addEventListener("touchstart", function (e) { var disX = 0; var startPoint = e.changedTouches[0].pageX; var startLeft = oSWiperWrapper.getBoundingClientRect().left; disX = startPoint - startLeft; oSWiperContainer.addEventListener("touchmove", doMove, false); oSWiperContainer.addEventListener("touchend", doUp, false); function doMove(e) { var currPoint = e.changedTouches[0].pageX; var newLeft = currPoint - disX; oSWiperWrapper.style.left = newLeft + &#39;px&#39;; } function doUp(e) { oSWiperContainer.removeEventListener("touchmove", doUp, false); oSWiperContainer.removeEventListener("touchend", doUp, false); } }, false); }, false); </script>

이제 드래그 앤 드롭이 가능합니다. 여기서는 간단하게 유지하겠습니다. 세로 방향도 고려할 필요가 없으며 회전식 회전판이 더 간단합니다. 드래그하는 것보다 가로 방향만 고려하세요.

문제는 놓으면 캐러셀의 각 항목이 올바른 위치로 이동하지 않는다는 것입니다. 실제로 매번 변경되는 왼쪽의 값은 어떻게 될까요? 위 그림에 표시된 것처럼 캐러셀의 너비입니다.

Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다.

빨간색 상자는 실제로 매번 한 그리드씩 이동합니다. 그런 다음 iNow 값을 설정하고 이동할 그리드 수를 기록하기만 하면 됩니다. iNow가 정확하다면 모든 것이 정상입니다.

nbsp;html>



    <meta>
    <meta>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        li {
            list-style: none;
        }

        .swiper-container {
            width: 320px;
            height: 130px;
            position: relative;
            margin: 20px auto;
            overflow: hidden;
        }

        .swiper-container .swiper-wrapper {
            width: 2240px;
            height: 130px;
            position: absolute;
            left: 0px;
            transition: .3s all ease;

        }

        .swiper-container .swiper-wrapper img {
            width: 320px;
            height: 130px;
            float: left;
            display: block;
        }

        .swiper-container ul {
            width: 35px;
            height: 4px;
            position: absolute;
            bottom: 10px;
            left: 50%;
            margin-left: -15px;
        }

        .swiper-container ul li {
            width: 4px;
            height: 4px;
            border-radius: 2px;
            border: 0.25px solid #fff;
            margin-left: 2.5px;
            background: #666;
            float: left;
            cursor: pointer;
        }

        .swiper-container ul .active {
            background: #fff;
        }

        .swiper-container ul li:hover {
            background: #fff;
        }
    </style>



    <p>
        </p><p>
            <img  src="/static/imghwm/default1.png" data-src="images/1.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/2.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/3.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
            <img  src="/static/imghwm/default1.png" data-src="images/4.jpg" class="lazy" alt="Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다." >
        </p>
        
                
  •             
  •             
  •             
  •             
  •         
         <script> document.addEventListener("DOMContentLoaded", function () { var oSWiperContainer = document.querySelector(".swiper-container"); var oSWiperWrapper = document.querySelector(".swiper-container .swiper-wrapper"); var aImg = document.querySelectorAll(".swiper-container .swiper-wrapper img") var aLi = document.querySelectorAll(".swiper-container ul li"); var iNow = 0; var oW = aImg[0].offsetWidth; oSWiperContainer.addEventListener("touchstart", function (e) { var disX = 0; var startPoint = e.changedTouches[0].pageX; var startLeft = oSWiperWrapper.getBoundingClientRect().left; disX = startPoint - startLeft; oSWiperContainer.addEventListener("touchmove", doMove, false); oSWiperContainer.addEventListener("touchend", doUp, false); function doMove(e) { var currPoint = e.changedTouches[0].pageX; var newLeft = currPoint - disX; oSWiperWrapper.style.left = newLeft+&#39;px&#39;; } function doUp(e) { var endPoint = e.changedTouches[0].pageX; if(endPoint-startPoint>50){ iNow--; if(iNow==-1){ iNow = 0; } oSWiperWrapper.style.left = -iNow*oW+&#39;px&#39;; } if(endPoint-startPoint<-50){ iNow++; if(iNow==aImg.length){ iNow = aImg.length -1; } oSWiperWrapper.style.left = -iNow*oW+&#39;px&#39;; } oSWiperContainer.removeEventListener("touchmove", doMove, false); oSWiperContainer.removeEventListener("touchend", doUp, false); } }, false); }, false); </script>

강조하자면, getBoundingClientRect(), 여기서는 왜 offsetLeft를 사용하지 않았나요? 실제 프로젝트에서는 캐러셀의 외부 레이어를 아무것도 덮는 것이 불가능하거나 여백과 패딩이 있는 경우 캐러셀의 거리가 잘못될 수 있기 때문에 offsetLeft를 사용하는 것은 프로젝트에 실용적이지 않습니다. 시연해도 좋습니다. 그렇게 작성하면 실제 프로젝트가 쓸모가 없습니다.

마지막으로 실제로 숫자를 세는 무한 캐러셀에 대해 이야기해보겠습니다!Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다.

) 소위 무한 캐러셀 원리는 iNow가 맨 오른쪽의 0과 같을 때 뒤로 당기는 것입니다. 빨간색 박스 위치에 왼쪽은 iNow가 맨 왼쪽의 4와 같을 때, iNow는 6과 같을 때입니다.

많은 사람들이 소스 코드를 가지고 있을 때 기본적인 학습을 무시하고 직접 사용합니다. 플러그인을 직접 찾는 것과 다르지 않으니 이건 그냥 약간의 연습이라고 생각하시면 됩니다.

4가지 연습:

1. 다중 화면에 대한 대응 실현

2. 무선 캐러셀 실현

3. 슬라이딩 거리가 50px를 초과하지 않으면 다음 화면이 방송되지 않는다는 점을 인식하세요.

4. 타이머 회전 Play!

Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다.

여기서 참고로 위의 4가지 연습 솔루션 왼쪽에 코드를 넣었으며, 모두가 이를 구현하는 방법을 배우기 위해 최선을 다해야 합니다. RECEMEDRENDEND 관련 기사 : Flex 플렉스 레이아웃의 설명 aflect ancumnss

css3 Flex 레이아웃 응용 프로그램 소개 _html/css_web-itnose

를 소개합니다.

위 내용은 Flex 레이아웃은 NetEase Cloud 플레이어 인터페이스의 레이아웃을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
html5的div一行可以放两个吗html5的div一行可以放两个吗Apr 25, 2022 pm 05:32 PM

html5的div元素默认一行不可以放两个。div是一个块级元素,一个元素会独占一行,两个div默认无法在同一行显示;但可以通过给div元素添加“display:inline;”样式,将其转为行内元素,就可以实现多个div在同一行显示了。

html5中列表和表格的区别是什么html5中列表和表格的区别是什么Apr 28, 2022 pm 01:58 PM

html5中列表和表格的区别:1、表格主要是用于显示数据的,而列表主要是用于给数据进行布局;2、表格是使用table标签配合tr、td、th等标签进行定义的,列表是利用li标签配合ol、ul等标签进行定义的。

常用的Flex布局属性有哪些常用的Flex布局属性有哪些Feb 25, 2024 am 10:42 AM

flex布局的常用属性有哪些,需要具体代码示例Flex布局是一种用于设计响应式网页布局的强大工具。它通过使用一组灵活的属性,可以轻松控制网页中元素的排列方式和尺寸。在本文中,我将介绍Flex布局的常用属性,并提供具体的代码示例。display:设置元素的显示方式为Flex。.container{display:flex;}flex-directi

手把手带你使用CSS Flex和Grid布局实现3D骰子(附代码)手把手带你使用CSS Flex和Grid布局实现3D骰子(附代码)Sep 23, 2022 am 09:58 AM

在前端面试中,经常会问到如何使用 CSS 实现骰子/麻将布局。下面本篇文章给大家介绍一下用CSS 创建一个 3D 骰子(Flex和Grid布局实现3D骰子)的方法,希望对大家有所帮助!

html5怎么让头和尾固定不动html5怎么让头和尾固定不动Apr 25, 2022 pm 02:30 PM

固定方法:1、使用header标签定义文档头部内容,并添加“position:fixed;top:0;”样式让其固定不动;2、使用footer标签定义尾部内容,并添加“position: fixed;bottom: 0;”样式让其固定不动。

HTML5中画布标签是什么HTML5中画布标签是什么May 18, 2022 pm 04:55 PM

HTML5中画布标签是“<canvas>”。canvas标签用于图形的绘制,它只是一个矩形的图形容器,绘制图形必须通过脚本(通常是JavaScript)来完成;开发者可利用多种js方法来在canvas中绘制路径、盒、圆、字符以及添加图像等。

html5中不支持的标签有哪些html5中不支持的标签有哪些Mar 17, 2022 pm 05:43 PM

html5中不支持的标签有:1、acronym,用于定义首字母缩写,可用abbr替代;2、basefont,可利用css样式替代;3、applet,可用object替代;4、dir,定义目录列表,可用ul替代;5、big,定义大号文本等等。

一文详解三个 flex 属性对元素的影响一文详解三个 flex 属性对元素的影响Aug 30, 2022 pm 07:50 PM

在开发的时候经常用 flex 这个属性作用于弹性盒子的子元素,例如:flex:1或者flex: 1 1 auto,那么这个属性到底控制了元素怎么的行为呢?flex:1又究竟是什么含义呢?让这篇文章带你彻底了解 flex 属性吧!

See all articles

핫 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구