flex布局实现网易云播放器界面的布局

这篇文章给大家介绍的内容是关于flex布局实现网易云播放器界面的布局,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

今天我们就深入项目的细节,说说每一个切图人员绕不过去的坎儿,也是jser必须要面对的一个常规任务–《网易云音乐高复用的响应式轮播图的实现》

轮播图相对于大家的工作,就和你首次去女朋友家的准备工作一样,重要而且绕不过去。遗憾的是,大部分人写轮播图都跟第一次见家长一样,没什么经验。

很多人想自己写一套轮播图,然后以后工作中不断的完善,最后形成自己的插件库,遗憾的是有这个想法的大部分人,到了行动的时候才发现,想要实现它,比兑现“结婚就买套房”的诺言都难。最后只好迫于项目压力和自身技能水平,变成了插件的搬运工。

可是插件搬运工有三个问题,首先这个东西对一个人的技术成长没什么用,其次也是重点,插件并不能完全符合项目需求,自己又没有能力进行二次开发,遇上诡异bug也只能听天由命,继续踏上寻找更合适的插件的慢慢征途。最后,有些插件很重,很臃肿,但你只需要的是最基础的轮播功能而已。你会为了吃上一碟醋,专门包顿饺子吗?我想不会。那你为什么仅仅为了使用一个轮播图会而项目里面使用几百k甚至上M的插件?

很多人可能会说因为不会写,好,今天我们就来实现一个,你会发现原来js的世界如此的简单和美好,有找插件的功夫,你都能开发出8个插件了。

1331009329-5b6af0a614137_articlex.png

往上看,大家都认的啥叫轮播图,仔细看下你第一步要做的至少说我拖着一个东西得能动,哪怕是一个红色方块呗。这里就得说下拖拽,拖拽改变的无非就是left和top值(外星人才改right和bottom,我们地球人一般都用left和top,别问我为什么),先让他在一个方向上动起来。

                Document            #p1 {            width: 100px;            height: 100px;            position: absolute;            left: 50px;            top: 50px;            background: red;        }                document.addEventListener("DOMContentLoaded", function () {            var op = document.getElementById('p1');            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 +'px';            }            function doUp(e) {                var currPoint = e.changedTouches[0].pageX;                var newLeft  = currPoint - disX;                op.style.left = newLeft +'px';                op.removeEventListener("touchmove", doUp,false);                op.removeEventListener("touchend", doUp,false);            }            op.addEventListener("touchend", doUp,false);        }, false);        

仔细看,无非就是用了移动端事件而已,分分钟就能理解,问题是很多同学会说,老师,我不理解这里,这是啥,

 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);

其实这些就是核心内容,简单的说就是一张图,非常简单的图,你一看就能懂。

1644406855-5b6af0b872dee_articlex.png

其实就是算蓝线的距离只要蓝线正确,位置就错不了,真要是理解不了也没事,你就把他当成公式记住一点毛病也没有。有了这些基础知识就好办了,搭个架子,

                    * {            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;        }        

@@##@@ @@##@@ @@##@@ @@##@@ @@##@@ @@##@@ @@##@@

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 + 'px'; } function doUp(e) { oSWiperContainer.removeEventListener("touchmove", doUp, false); oSWiperContainer.removeEventListener("touchend", doUp, false); } }, false); }, false);

至少现在一拖拽走起来了,这里简单吧,连纵向都不用考虑,轮播比拖拽还简单,只考虑水平方向,

问题是松手了以后,轮播图的,每一项没去正确的位置,啥叫正确的位置,其实每次改变的left的值将好是一个轮播图的宽度,上图。

flex布局实现网易云播放器界面的布局

你先别管别的,看红框就是手机屏幕宽度,每次其实就是移动一个格子。那我只要定一个iNow值记录移动几个格子,只要iNow正确就一切OK了呗,说干就干。

                    * {            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;        }        

@@##@@ @@##@@ @@##@@ @@##@@

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+'px'; } function doUp(e) { var endPoint = e.changedTouches[0].pageX; if(endPoint-startPoint>50){ iNow--; if(iNow==-1){ iNow = 0; } oSWiperWrapper.style.left = -iNow*oW+'px'; } if(endPoint-startPoint<-50){ iNow++; if(iNow==aImg.length){ iNow = aImg.length -1; } oSWiperWrapper.style.left = -iNow*oW+'px'; } oSWiperContainer.removeEventListener("touchmove", doMove, false); oSWiperContainer.removeEventListener("touchend", doUp, false); } }, false); }, false);

强调一点,getBoundingClientRect(),这里我为什么没用offsetLeft呢?因为实际项目里面不可能轮播图的外层什么都不套,或者说万一有margin、padding,轮播图的距离就不对了,使用offsetLeft是不具有项目的实用性的,做演示还行,实际项目那么写就废了。

最后我说一个无限轮播图,其实就是算数字的,!flex布局实现网易云播放器界面的布局

)所谓无限轮播的原理,就是当iNow 等于最右边的0的时候,拉回到红框位置,左侧是当iNow 等于 最左边的4的时候,iNow等于6.

很多人有了源代码就忽略了基础的学习,直接拿过去用了,那跟直接找插件没区别,所以这个就当一个小练习吧。

四个练习:

1.实现多屏幕相应适配

2.实现无线轮播

3.实现如果滑动距离不超过50px就不播下一张

4.实现定时器自动轮播!

flex布局实现网易云播放器界面的布局

这里我把上面四个练习解决方法的左侧代码放出来作为提示,大家尽量学会实现。

相关文章推荐:

flex布局详解

利用flex布局来column分布的方法

CSS3 flex布局应用介绍_html/css_WEB-ITnose

flex布局实现网易云播放器界面的布局flex布局实现网易云播放器界面的布局flex布局实现网易云播放器界面的布局flex布局实现网易云播放器界面的布局411980114-5b6af0cc7912d_articlex.pngflex布局实现网易云播放器界面的布局flex布局实现网易云播放器界面的布局flex布局实现网易云播放器界面的布局flex布局实现网易云播放器界面的布局411980114-5b6af0cc7912d_articlex.png3579374532-5b6af0f35d5e7_articlex.png

以上就是flex布局实现网易云播放器界面的布局的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1610997.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 01:56:17
下一篇 2025年12月24日 01:56:35

相关推荐

  • 常用的Flex布局属性有哪些

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

    2025年12月24日
    000
  • position布局与flex布局的比较与选择

    position布局与flex布局的比较与选择 在前端开发中,页面布局是一个非常重要的部分,它决定了页面元素的位置和排列方式。在CSS中,有多种方式可以实现页面布局,其中两种常见的方式是position布局和flex布局。本文将从比较和示例两方面来介绍这两种布局方式的特点,以便读者在实际开发中能够灵…

    2025年12月24日
    000
  • 项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结

    项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结 随着互联网的快速发展,网页设计已经成为了各行各业都离不开的一项技能。优秀的网页设计可以给用户留下深刻的印象,提升用户体验,增加用户的黏性和转化率。而要做出优秀的网页设计,除了对美学的理解和创意的运用外,还需要掌握一些基本的技能,如…

    2025年12月24日
    200
  • CSS 自适应布局属性指南:flex 和 grid

    CSS 自适应布局属性指南:flex 和 grid 简介:在现代web开发中,响应式设计已经成为了一个不可忽视的设计趋势。为了适应各种不同的屏幕大小和设备类型,CSS 提供了一些布局属性,其中两种最常用的方式是 flexbox 和 grid。本文将介绍这两种属性的使用方法,包括具体的代码示例。 一、…

    2025年12月24日
    000
  • CSS 弹性布局属性详解:flex 和 justify-content

    CSS 弹性布局属性详解:flex 和 justify-content 在现代的网页设计中,弹性布局(flexbox)成为了一种非常有用的布局方式。弹性布局允许我们轻松地创建自适应且灵活的布局,以适应各种屏幕尺寸和设备类型。两个核心属性 flex 和 justify-content 在弹性布局中扮演…

    2025年12月24日
    000
  • CSS 表格布局属性解读:table 和 display

    CSS 表格布局属性解读:table 和 display 在前端开发中,表格布局是常用的一种布局方式。CSS提供了一些表格布局属性,其中最常用的是table和display属性。下面将详细解读这两个属性,并给出具体的代码示例。 一、table 属性 table是CSS中用于设置元素为表格布局的属性。…

    2025年12月24日
    000
  • CSS 自适应布局属性优化技巧:flex 和 grid

    CSS 自适应布局属性优化技巧:flex 和 grid 在现代Web开发中,实现自适应布局是一项非常重要的任务。随着移动设备的普及和屏幕尺寸的多样化,确保网站在各种设备上都能良好地展示,适应不同的屏幕尺寸,是一个必不可少的要求。幸运的是,CSS提供了一些强大的属性和技巧来实现自适应布局。本文将重点介…

    2025年12月24日
    000
  • 详解Css Flex 弹性布局及其应用技巧

    详解CSS Flex 弹性布局及其应用技巧 引言:弹性布局(Flex)是CSS3中引入的一种新的布局模型,它能够让容器中的子元素自动调整大小和位置以适应不同的容器大小。使用Flex布局可以快速实现复杂的网页布局,并且具有良好的响应性能。 一、Flex布局的基本概念Flex布局由容器和子元素组成,容器…

    2025年12月24日
    000
  • 如何使用Css Flex 弹性布局实现响应式图片轮播

    如何使用Css Flex 弹性布局实现响应式图片轮播 在现代的网页设计中,响应式设计变得越来越重要。当我们设计一个网站或者应用程序时,我们希望它能够适应不同屏幕尺寸的设备,无论是手机、平板还是桌面电脑。 图片轮播是一个常见的网站组件,它可以用来展示多张图片的滑动效果。在本文中,我们将介绍如何使用Cs…

    2025年12月24日 好文分享
    000
  • 如何通过Css Flex 弹性布局实现表单元素的自适应布局

    如何通过CSS Flex 弹性布局实现表单元素的自适应布局 引言:随着移动设备的普及和多样化,以及响应式网页设计的发展,为了让网页在不同设备上有良好的显示效果,设计师和开发者们需要考虑如何实现元素的自适应布局。CSS Flex 弹性布局为我们提供了一个简单而灵活的解决方案。本文将介绍如何通过 CSS…

    2025年12月24日
    000
  • 详解Css Flex 弹性布局在音乐播放器设计中的应用

    详解CSS Flex 弹性布局在音乐播放器设计中的应用 在现代Web开发中,CSS弹性布局(Flex布局)已成为一种常用的布局技术。它为我们提供了一种简单而灵活的方式来实现可伸缩性和响应性强的界面设计。音乐播放器是一个经典的案例,可以借助Flex布局来实现良好的用户界面和交互体验。本文将详细介绍CS…

    2025年12月24日
    000
  • 如何通过Css Flex 弹性布局实现滑动菜单效果

    如何通过CSS Flex弹性布局实现滑动菜单效果 在网页设计中,滑动菜单是一种常见的交互效果,它可以让网页更加流畅和美观。本文将教你使用CSS Flex弹性布局来实现这一效果,并提供具体的代码示例。 CSS Flex是一种新的布局方式,可以方便地实现各种复杂的布局效果。它通过设置容器和子元素的属性来…

    2025年12月24日
    000
  • 如何使用Css Flex 弹性布局创建分页导航条

    如何使用 CSS Flex 弹性布局创建分页导航条 CSS Flex 弹性布局是一种灵活且强大的布局方式,可以帮助我们在分页导航条的设计中轻松实现适应不同屏幕大小和设备的布局效果。本文将介绍如何使用 CSS Flex 弹性布局来创建一个简单的分页导航条,并提供具体的代码示例。 首先,我们需要准备一些…

    2025年12月24日
    000
  • 详解Css Flex 弹性布局中的网格间距与边框处理方法

    标题:详解CSS Flex弹性布局中的网格间距与边框处理方法 引言:CSS Flex弹性布局是一种现代的页面布局方式,可以使网页在不同的屏幕尺寸下自动适应,并且具有灵活性和响应性。在使用CSS Flex弹性布局时,我们经常会遇到需要设置网格间距和边框的情况。本文将详细介绍CSS Flex弹性布局中的…

    2025年12月24日
    000
  • 如何使用CSS3的flex特性,优化网页排版效果?

    如何使用CSS3的flex特性,优化网页排版效果? 现如今,网页设计已经成为了一种艺术。在过去,我们使用传统的盒模型和浮动布局来实现网页排版效果,但是这种方法有很多限制,并且在不同设备上显示效果不一致。而CSS3的flex特性则为我们提供了一种更为灵活和强大的方式来布局网页。本文将为大家介绍如何使用…

    2025年12月24日
    000
  • 学完HTML和CSS之后我应该做什么?

    网页开发是一段漫长的旅程,但是掌握了HTML和CSS技能意味着你已经赢得了一半的战斗。这两种语言对于学习网页开发技能来说非常重要和基础。现在不可或缺的是下一个问题,学完HTML和CSS之后我该做什么呢? 对这些问题的答案可以分为2-3个部分,你可以继续练习你的HTML和CSS编码,然后了解在学习完H…

    2025年12月24日
    000
  • 聊聊怎么利用CSS实现波浪进度条效果

    本篇文章给大家分享css 高阶技巧,介绍一下如何使用css实现波浪进度条效果,希望对大家有所帮助! 本文是 CSS Houdini 之 CSS Painting API 系列第三篇。 现代 CSS 之高阶图片渐隐消失术现代 CSS 高阶技巧,像 Canvas 一样自由绘图构建样式! 在上两篇中,我们…

    2025年12月24日 好文分享
    200
  • 巧用距离、角度及光影制作炫酷的 3D 文字特效

    如何利用 css 实现3d立体的数字?下面本篇文章就带大家巧用视觉障眼法,构建不一样的 3d 文字特效,希望对大家有所帮助! 最近群里有这样一个有意思的问题,大家在讨论,使用 CSS 3D 能否实现如下所示的效果: 这里的核心难点在于,如何利用 CSS 实现一个立体的数字?CSS 能做到吗? 不是特…

    2025年12月24日 好文分享
    000
  • CSS高阶技巧:实现图片渐隐消的多种方法

    将专注于实现复杂布局,兼容设备差异,制作酷炫动画,制作复杂交互,提升可访问性及构建奇思妙想效果等方面的内容。 在兼顾基础概述的同时,注重对技巧的挖掘,结合实际进行运用,欢迎大家关注。 正文从这里开始。 在过往,我们想要实现一个图片的渐隐消失。最常见的莫过于整体透明度的变化,像是这样: 立即学习“前端…

    2025年12月24日 好文分享
    000
  • css实现登录按钮炫酷效果(附代码实例)

    今天在网上看到一个炫酷的登录按钮效果;初看时感觉好牛掰;但是一点一点的抛开以后发现,并没有那么难;我会将全部代码贴出来;如果有不对的地方,大家指点一哈。 分析 我们抛开before不谈的话;其实原理和就是通过背景大小以及配合位置达到颜色渐变的效果。 text-transform: uppercase…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信