当前位置:首页 > 文章 > 正文内容

前端开发日常——CSS动画无限轮播

廖万里3年前 (2022-10-27)文章20627

近来没有什么值得写的东西,空闲的时候帮前端的同学做了些大屏上的展示模块,就放在这里写写吧,手把手“需求->设计-> 实现”,受众偏新手向。

  前端开发日常——CSS动画无限轮播

  为了直观便于理解, 直接把结果贴在上面。

  如上所示,基本需求比较简单明了, “分页显示供应商、供应占比列表,自动轮播”。

 

  一、需求评审

  该有的环节还是要有,尽管需求简单,评审不能省略,无论形式。开发的同学千万不要真的相信需求就这么简单,否则南辕北辙,出力不讨好,那必定是日常-_-||。

  于是有丰富填坑经验的开发同学,对于这个简单的模块需求,可能会提出如下的一些问题

  1. 如果只有一页,要不要轮播?

  2.每页的轮播间隔频率是多少?

  3.如果列表没有数据,如何显示这个模块?

  4.数据的刷新时机?是翻页刷新,轮播一圈刷新,还是其他?

  5.这个绿色的比值是什么含义? 是不是还有红色?

  6.百分比的小数位?

  7.如果接口异常比如网络不通,如何表示这种异常?

  8.供应商的名字会不会有500字那么长? 放不下如何布局?

  ……等等

  以上任何一个未明确的需求,都可能成为你编码完成后的一个bug或优化建议。 o(* ̄︶ ̄*)o。

 

  二、设计评审  

  关于上面待确认的每一个问题,我们伟大的产品经理都一一耐心的给出了“令人信服的”回答后。还是不能马上开始编码。下面我们需要进行一些技术方案的设计讨论,由技术leader把关。例如:

  1. 数据流,这个列表的数据,是从数据库中的哪几个表取出的? 确认下查询逻辑。

  2.接口设计,是一次返回前端所有数据,还是支持分页查询。

  3.性能考虑,查询频率是不是较高,并发是不是大,缺不缺索引,要不要上缓存?

  4.轮播如何实现? 有没有已经集成的轮播控件,是否满足要求,还是需要自己写一个。

  5.如何进行模块化开发,作为一个模块集成嵌入到整体页面中。

  ……等等

  明确了以上的问题后,作为前端同学的我,是不是可以开始撸代码了?

   

  三、想清楚再写

  说到这里,

  一类同学已经开始着手编码了, 第一个想到需要写的方法可能是,ajax 去后台请求数据列表的接口。

  另一类同学,可能仍在构思,如何组织代码,提炼主要的数据结构和功能方法。

  这里我们显然应该向“另外一类”同学学习。想清楚再写,是一个毫无疑问的好习惯

  技术预研

  实现一个功能,首先要扫除其中的未知技术点,扫除了所有未知之后,才能够优化的组织实现方案

  上面的需求对于我这种半吊子前端来说,比较关键的两个技术问题是。

  1)用什么方案来实现滑动动画。 2)如何实现“无限滚动”。

 

  滑动动画——经过一番百度,总结下动画可能的实现方案,包括用JS实现或者用CSS实现。 各有优劣,js 兼容性好,控制灵活;CSS性能高,平滑流畅。因为我们的动画非常线性,简单,于是这里我们决定采用CSS动画作为动画的实现方案。

  通过简单的研究,我们已经弄清楚了, 想让一个页面元素具有一个动画效果,可以通过向他添加一个包含了动画关键真的选择器来实现,比如定义一个滑出动画类,把这个css类加到元素上,元素就可以实现滑出的动画效果。

 

  无限滚动——思考下滚动页面,虽然对于数据来说可能会分成很多页,但对于屏幕展示来说,实际上最多同时出现两个页面,一个是前一页,一个是当前页。在不滚动的时候只有当前页需要显示。

  顺着这个思路, 滚动这个动作对应,“当前页飞入”“前一页飞出”这两个细分动作,特别的情况是,初始显示时,是没有“前一页”的。

  那么滚动这个动作大概思路就是,

  1. 根据当前页号取得对应数据,绘制HTML页面,append到滚动区域,对其添加“飞入”动画

  2. 根据当前页号取得上一页页面元素,对其添加“飞出”动画,动画结束后将其移除, 仅显示当前页。

 

  四、编码实现

  终于到了编码的时间了。

  用到的 css 动画类选择器,以及关键帧 

前端开发日常——CSS动画无限轮播
.slip_in_animation{
    animation: slip_in 1s;
}.slip_out_animation{
    animation: slip_out 1s;
}/*右侧滑入*/@keyframes slip_in{
    from {transform:translateX(100%);}
    to {transform:translateX(0);}}/*右侧滑入*/@keyframes slip_out{
    from {transform:translateX(0);}
    to {transform:translateX(-100%);}}
前端开发日常——CSS动画无限轮播

  js应用于页面元素,飞入飞出, 飞出后删除,*动画在结束后并不会改变元素实际位置。所以要在动画结束前,移除元素,避免它回到之前位置,挡住当前页,发生“闪烁”

前端开发日常——CSS动画无限轮播
    //页面滑入,要显示的页面
    this.slipIn = function(pageNo){
        $("#supplierListPage_"+pageNo).addClass("slip_in_animation");
    };    //页面滑出,
    this.slipOut = function(pageNo){
        $("#supplierListPage_"+pageNo).addClass("slip_out_animation");        //移除上一页,定时比动画稍短,避免闪烁
        setTimeout(function(){
            $("#supplierListPage_"+pageNo).remove();
        },900);
    };
前端开发日常——CSS动画无限轮播

  翻页的逻辑,第一次不滚动;滚到头,把最后一页飞出,第一页飞入。

前端开发日常——CSS动画无限轮播
    this.switchNext = function(pageNo){        //附加生成新的页面
        var newPageHtml =  _this.makePageHtml(pageNo);
        $("#"+ _this.containerId).append(newPageHtml);        //多于一页的情况
        if(_this.firtshow){
            _this.firtshow= false;            //第一次换页 不需要移除之前页面。
        }else{            //前面已经有显示过的页面,需要把前面的页面滚动出去。
            var olderPage =  pageNo -1;            if(olderPage <=0){                //当前页是第一个,前一页就是最后一页
                olderPage = _this.totalPage;
            }
            _this.slipOut(olderPage);
        }
        _this.slipIn(pageNo);
    };
前端开发日常——CSS动画无限轮播

  定时滚动到下一页。如果是最后一页,重新开始第一页。

前端开发日常——CSS动画无限轮播
    this.startRolling = function(){
            _this.switchNext(_this.curPage);            //按间隔轮播
            _this.switchTimer =  setInterval(function(){                if(_this.totalPage == 1)                    return;                if(_this.curPage < _this.totalPage) {
                    _this.curPage++;
                }else{
                    _this.curPage = 1;
                }
                _this.switchNext(_this.curPage);
            },_this.switchInterval);
    };
前端开发日常——CSS动画无限轮播

写到这里,下面是完整代码,需要的可以参考。

 

完整的代码CSS:

前端开发日常——CSS动画无限轮播 View Code

 

完整JS:

前端开发日常——CSS动画无限轮播 View Code

 

HTML页面容器:

前端开发日常——CSS动画无限轮播 View Code

 


本文链接:https://www.kkkliao.cn/?id=166 转载需授权!

分享到:

版权声明:本文由廖万里的博客发布,如需转载请注明出处。


“前端开发日常——CSS动画无限轮播” 的相关文章

工龄38年机关事业单位人员正处级养老金有多少钱?

工龄38年机关事业单位人员正处级养老金有多少钱?

机关事业单位人员,工龄38年,正处级,养老金有多少钱?机关事业单位人员,如果在2024年以前退休,那么是属于退休中人,相比退休老人,养老金计算方式比较特殊,如果退休时,当地还没有理顺养老金待遇,就会领取预发养老金,等以后理顺后,再进行补发。那么对于工龄38年,正处级,养老金可以达到多少呢?应该说,正...

苹果手机打电话时如何录音

苹果手机打电话时如何录音

在国内,通话录音这项功能我们每个人都有可能使用到!因为某种意义上,可以作为证据使用。大多数的安卓手机都会支持这项功能。而苹果手机支持通话录音吗?答案是显而易见的:不支持!为什么不支持通话录音呢?对于苹果手机而言,更关注隐私的安全。通话录音在其看来是侵犯了对方的隐私,所以苹果公司不支持通话录音功能。并...

6G专利申请量比拼:美国占比35.2%,日本占比9.9%,中国排第几?

6G专利申请量比拼:美国占比35.2%,日本占比9.9%,中国排第几?

5G对于现在的人们来说已经不是什么神秘的存在,很多国家通过近些年的研究都已经逐步掌握了5G技术。不过就5G技术发展的成熟度、设备完善程度以及信号铺设范围来说,我国都是当之无愧的世界第一。但是随着科技技术的不断发展,对于6G的技术研发也被提上日程。不少国家都开始攻克6G技术,并取得了各项专利。根据有关...

六年前端面试报告

六年前端面试报告

2022.10.20 在当前公司待了两年多,被离职了,拿了点赔偿金继续面试。薪资期望 13-15, 趁着今天1024整理下面试过程。上一次面试我是4年经验,简历也好改,加上两年经验,补上现公司项目就出去找工作了。简历改完后,首先分析下自己现阶段水平,大概能要多少,定一个期望薪资。再就是背面试题了。自...

腾讯突然宣布关闭这项业务,阿里巴巴和百度还能做什么?

腾讯突然宣布关闭这项业务,阿里巴巴和百度还能做什么?

腾讯地图官网近日宣布,电脑端的腾讯地图将于11月11日停止服务,用户可以下载腾讯地图App。今年5月,搜狗地图也暂停了电脑端的服务,如今仅剩百度地图一家仍旧提供电脑端服务。这一变化,与移动互联网的发展不无关系。虽然电脑端地图服务商缩水,但在移动端,背靠阿里巴巴的高德地图、百度的重要业务板块百度地图,...

宇宙中发现比光速更快的速度?事实被澄清,这不过是种错觉

宇宙中发现比光速更快的速度?事实被澄清,这不过是种错觉

有比光速更快的速度吗?来自遥远爆炸星系的伽马射线爆发(如图中所示)发射的光比我们所看到的可见光更强大,但这并不意味着它们的速度更快。2018年,天文学家在研究哈勃太空望远镜图像中的两颗碰撞中子星时注意到了一个奇怪的现象:一股明亮的高能粒子流,以 4~7 倍于光速的速度从合并处喷向地球方向。这似乎有些...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。