精华内容
下载资源
问答
  • 最近在项目中,产品经理要求实现input框一种特效,由于这个页面是用vue写,所以就在github上找有vue有关这方面组件,结果引入之后就出现了很多问题,首先这个vue项目ui框架是饿了吗开发Mint UI,里面...

    最近在项目中,产品经理要求实现input框的一种特效,由于这个页面是用vue写的,所以就在github上找有vue有关这方面的组件,结果引入之后就出现了很多问题,首先这个vue项目用的ui框架是饿了吗开发的Mint UI,里面没有这种效果,然后又借鉴了一下vonic这个ui框架,但是引入的时候有些不兼容。无奈之下就自己写了一下这个特效,顺便又学习了一下动画效果。
    其实最主要用到css3的动画特性是transition。那我们先介绍一下transition这个动画属性,transition的属性主要是(介绍截自w3c)

    语法 transition: property duration timing-function delay;

    **值 描述
    transition-property 规定设置过渡效果的 CSS 属性的名称。
    transition-duration 规定完成过渡效果需要多少秒或毫秒。
    transition-timing-function 规定速度效果的速度曲线。
    transition-delay 定义过渡效果何时开始。**
    好了,下面是更为详细的介绍:
    过渡属性

    【1】transition-property:

    规定应用过渡效果的 CSS 属性的名称(当指定的CSS属性改变时,过渡效果开始),其默认值为 all 。

    【2】transition-duration:

    规定完成过渡效果需要的时间(单位为 s 或 ms),其默认值为 0s ,意味着如果不指定这个属性,将不会呈现过渡效果。

    【3】transition-timing-function:

    规定过渡效果的时间曲线。

    默认 ease :慢速开始,中间变快,慢速结束;相当于 cubic-bezier(0.25, 0.1, 0.25, 1)。

    可选 liner:匀速运动;相当于 cubic-bezier(0, 0, 1, 1)。

    可选 ease-in:慢速开始;相当于 cubic-bezier(0.42, 0, 1, 1)。

    可选 ease-out:慢速结束;相当于 cubic-bezier(0, 0, 0.58, 1)

    可选 ease-in-out:慢速开始,慢速结束;相当于 cubic-bezier(0.42, 0, 0.58, 1)

    可选 cubic-bezier(n, n, n, n):在 bezier 函数中自定义 0 ~ 1 之间的数值。

    贝塞尔时间曲线详解。。。

    【4】transition-delay:

    规定过渡效果的延迟时间,默认为 0s 。

    复合属性

    在使用复合属性定义过渡效果时,子属性之间用空格分隔。
    transition: width 2s linear;
    transition 属性可以指定多个值,当指定多个值时,中间用逗号分隔。
    transition: width 2s ease-in-out, height 2s ease-in-out;
    其中过渡过程中还有很多情况,具体请见最后的参考链接,很不错的一篇文章

    好了,以上是总结的一些基础知识,下面是具体的运用
    项目中的要求是点击input框,input框中的提示语也就是placeholder的值上移,变成
    这样的样式了,
    这是在vue项目中写的,
    html

    <div class='xuan-input'>
         <span :class="dutyAct">职位</span>
         <div class='input-label'>
            < input @keyup="input" @blur="blur('duty')" @focus="focus('duty')" v-model="duty" placeholder="职位" type=“text” maxlength=“50”/>
            <i v-if="false" @click="clearInput('duty')"></i>
         </div>
     </div>    

    css

    .xuan-input{
          padding:15px 0px;
          width:100%;
          height:75px;
          background-color:#fff;
          display: inline-block;
          position: relative;
          border-bottom: 0.5px solid #e6e6e6;
          span{
              padding-top:2px;
              font-size:16px;
              line-height:20px;
              font-weight:400;
              position:relative;
              padding:5px 0 0;
              opacity: 0;
              top: 10px;
              display: inline-block;
              color: #aea9a5;
              font-size: 14px;
              &.active{
                 transition:opacity 0.15s ease-in, top 0.2s linear;
                 opacity: 1;
                 top:0;
                 }
                 }
          ..input-label{
            display:inline-block;
            position: relative;
            width:100%;
            input{
            display:block;
            padding-top: 2px;
            pading-left:0;
            height:34px;
            color:#111;
            width: 90%;
            font-size: 16px;
            line-height:16px;
            }
            i{
            position:absolute;
            top: 7px;
            right: 0;
            z-index:3;
            width: 24px;
            height: 24px;
            background-image:url();
            background-size: 12px 12px;
            background-repeat: no-repeat;
            background-position: 5px 5px;
            }

    参考:
    深入理解 CSS 过渡 transition

    展开全文
  • 虽然动画宣传片制作流程就那几个步骤,但是由于不同的动画制作公司人员结构不同以至于处理项目的节奏还是不一样。下面咻动画就来给小伙伴们简单介绍一下关于深圳动画公司基本动画制作流程有哪些。「咻动画」...

    虽然动画宣传片的制作流程就那几个步骤,但是由于不同的动画制作公司人员结构不同以至于处理项目的节奏还是不一样的。下面咻动画就来给小伙伴们简单介绍一下关于深圳动画公司的基本动画制作流程有哪些。

    「咻动画」深圳动画公司基本的动画制作流程

    一、策划脚本

    例如我们制作的是产品宣传片,在配合深圳动画公司围绕着产品基本信息、产品内涵、动画风格、大致剧情走向等方面进行双方洽谈磨合过后就要针对宣传片进行脚本策划了。这是整个动画宣传片的制作流程中相当重要的一个步骤,我们要规划好如何利用这短短的两三分钟来对产品进行多方面的介绍,同时还要在动画宣传片中融入能够戳中受众痛点的内容与动画创意设计。

    二、设计分镜

    需要与动画脚本一起交给客户审核的还有动画的分镜头,虽然动画宣传片的分镜通常只是简单的线描草稿,但是我们却不能小看它的绘制难度,深圳动画公司的绘画师需要准确地将脚本中描述的每个重要镜头绘制出来,并且画面中应有的氛围也要通过简单的线稿体现出来,看似简单的几笔画起来却一点儿也不简单。

    三、绘制素材

    在审核完动画脚本与分镜并确定下来不需要修改之后,深圳动画公司通常会先绘制好动画宣传片中需要用到的角色、场景等素材,将每种需要用到的元素都准备就绪之后就开始进入动画制作阶段了。

    四、制作动画

    这一阶段除了给动画宣传片中的每个镜头加上动态设计之外,深圳动画公司也会针对对不同的场景转换进行创意设计,让场景的转换之间不但衔接自然流畅还会有让观众眼前一亮的创意设计。

    五、调配声音

    完成动态设计之后就要开始为动画进行旁白、音效、背景音乐、音响效果等配音,动画宣传片制作流程到了这一步也基本接近尾声了。

    「咻动画」深圳动画公司基本的动画制作流程

    其实仔细罗列下来动画制作的步骤也不是很复杂,以上就是咻动画给小伙伴们整理的深圳动画公司的基本动画制作流程了,希望能够帮助大家进一步地了解动画宣传片的制作。

    展开全文
  • 关于阅读器翻页动画的实现,有大把的开源项目可以借鉴,但基本都是基于canvas 2D动画,利用缓存bitmap来处理。绘制需要完全手动绘制。有很多优秀的ios 阅读产品,都...

           关于阅读器翻页动画的实现,有大把的开源项目可以借鉴,但基本都是基于canvas 2D动画,利用缓存bitmap来处理。绘制需要完全手动绘制。有很多优秀的ios 阅读产品,都可以在阅读页插入翻页视频,以及几大ADDSP的广告sdk顺滑接入,炫酷之余很有产品价值。反观android,目前还没找到同样优秀的产品,苦于没有借鉴思路。随不知活路,却已知死路。bitmap+canvas的手动绘制 局限性太大,展现形态未能解耦,内容无法对外扩充。这对于接入pdf,epub等格式的拓展非常困难。

           反过来想想,使用缓存bitmap+canvas最主要的就是目的就是解决缓存翻页与动画的实现,而并非是要处理页面展现的。基于单个页面解耦的目的,缓存机制可以使用 RecyclerView,动画部分就借助 LayoutManager。

    恶补了一波RecyclerView与LayoutManager机制与原理,这里不赘述了。

    核心思路:利用LayoutManager将itemView 摆放成Z轴的ABC三层,而不是左,中,右水平摆放,再根据滑动手势处理view状态产生动画。

    提前需要考虑的问题:事件穿透,滑动冲突,无缝切换动画,引入openGL实现curl仿真翻页动画的坑。

          在下手之前,感觉比较费劲,但是一步步探索实现后,回头再看并不复杂,只是要注意的细节比较多。

    目前效果

    • 垂直翻页


    • 覆盖滑动

    • 横向滚动

    • 仿真卷曲动画 :取消翻页时,页面会错乱

            垂直翻页 和 覆盖滑动 动画实现思路:自定义LayoutManger,处理滑动及itemView显示位置,根据滑动方向将下一个或上一个itemView提前固定作为准备展示的页,利用scale 控制将进入屏幕的itemView显示状态,利用Rotation 实现翻转效果,利用viewZ轴层级准确提供页面层级,利用阴影增加上下页的立体视觉。

    核心代码:

    if (bookFilpMode == MODE_HORIZATIONAL_SLIDE || bookFilpMode == MODE_FILP) {
                    //view 复用时 需要重制属性
                    if (itemIndex + 1 <= fastVisiPos) {
                        //计算下一个view
                        View nextView = recycler.getViewForPosition(itemIndex + 1);
                        nextView.setScaleX(1f);
                        nextView.setScaleY(1f);
                        nextView.setTranslationX(0);
                        nextView.setRotationY(0f);
                        if (itemIndex <= focusPosition) {
                            addView(nextView);
                        } else {
                            addView(nextView, 0);
                        }
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                            nextView.setElevation(-1);
                        }
                        measureChildWithMargins(nextView, 0, 0);
                        int nl, nr;
                        nl = 0;
                        nr = nl + getDecoratedMeasurementHorizontal(nextView);
                        layoutDecoratedWithMargins(nextView, nl, 0, nr, bottom);
                    }
                }
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    itemView.setElevation(0);
                }
                layoutDecoratedWithMargins(itemView, left, top, right, bottom);
    
    
                if (bookFilpMode == MODE_HORIZATIONAL_SLIDE) {
                    itemView.setTranslationX(dx);
                    final int childCenterX = (right + left) / 2;
                    final int parentCenterX = getWidth() / 2;
                    boolean isChildLayoutLeft = childCenterX <= parentCenterX;
                    if (isChildLayoutLeft) {
                        itemView.setScaleX(1f);
                        itemView.setScaleY(1f);
                    } else {
                        itemView.setTranslationX(0);
                        itemView.setScaleX(0);
                        itemView.setScaleY(0);
                    }
                } else if (bookFilpMode == MODE_FILP) {
                    final int childCenterX = (right + left) / 2;
                    final int parentCenterX = getWidth() / 2;
                    boolean isChildLayoutLeft = childCenterX <= parentCenterX;
                    if (!isChildLayoutLeft) {//隐藏屏幕外的
                        itemView.setTranslationX(0);
                        itemView.setScaleX(0);
                        itemView.setScaleY(0);
                    }else {
                        itemView.setScaleX(1F);
                        itemView.setScaleY(1F);
                    }
                    float offset = (horizontalOffset * 1.0f) % (childWidth * 1.0f);
                    float rataitonY = Math.abs(offset / childWidth * 90);
                    itemView.setTranslationX(offset);//一边沿着Y轴旋转一边调整位置
                    itemView.setCameraDistance(-50000);//无限拉近相机焦点
                    itemView.setPivotX(0);
                    itemView.setRotationY(-rataitonY);//沿着Y 反转
                }else {
                    itemView.setTranslationX(dx);
                    itemView.setScaleX(1f);
                    itemView.setScaleY(1f);
                    itemView.setRotationY(0f);
                }
    

      仿真卷曲动画实现思路:使用开源库pagecurl的卷曲动画,在Layoutmanger中提前准备好Itemview的缓存bitmap,或者直接使用RecyclerView的缓存bitmap,并提供给curlView。

    核心代码:

     @Override
            public int getPageCount() {
                return adapter.getItemCount();
            }
    
    
            @Override
            public void updatePage(CurlPage page, int width, int height, int index) {
                int lastIndex = curlLayoutManger.getSelectIndex();
                RBLog.log("updatePage index=%s lastIndex=%s", index, lastIndex);
                Message message = handler.obtainMessage();
                message.arg1 = index;
                handler.sendMessage(message);
                recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
                recyclerView.setDrawingCacheEnabled(true);
                recyclerView.buildDrawingCache();
                Bitmap bitmap = recyclerView.getDrawingCache().copy(Bitmap.Config.RGB_565, false);
                recyclerView.setDrawingCacheEnabled(false);
                recyclerView.destroyDrawingCache();
    //                Bitmap front = curlLayoutManger.getItemBitmap().copy(Bitmap.Config.RGB_565,false);
                page.setTexture(bitmap, CurlPage.SIDE_BOTH);
                page.setColor(Color.rgb(0xFF, 0xFF, 0xFF), CurlPage.SIDE_BACK);
            }
        }
    

           pagecur的引入,十分尴尬。这是我个人能找到最好接入的curl opengl绘制代码。但有一个非常核心的问题,GLSuacefaceView 它不是来自ViewGroup而是View。1.不能与RecyclerView共享同一个事件传递树,2.只能播放View的bitmap 而不是view本身,导致需要提前准备好bitmap。也就是会出现上面动画中,翻页显示错乱的情况,实践了一些思路 都不理想。

    如果读到此篇的你有兴趣的话,可以评论交流提供意见或者直击源码https://github.com/HarkBen/ReadAnim



    作者:可米西
    链接:https://www.jianshu.com/p/1992d49e5fbf

    关注我获取更多知识或者投稿

    展开全文
  • 项目中这次改版应产品要求加入tabbar点击做放大缩小动画,只改变图片,标题不做动画。先看效果图Demo地址图片做放大缩小动画,很好做。用CoreAnimation动画就可以实现。不过貌似系统并没有开出开关于tabbar上...

    项目中这次改版应产品要求加入tabbar点击做放大缩小动画,只改变图片,标题不做动画。先看效果图未命名.gif

    Demo地址

    图片做放大缩小动画,很好做。用CoreAnimation的帧动画就可以实现。不过貌似系统并没有开出开关于tabbar上的imageView这个属性。其实我们找到在tab上的imageView,这一切问题就好解决了。
    直接上代码
    声明一个tab继承系统tabbar
    #import <UIKit/UIKit.h>
    
    @interface FFTabBar : UITabBar
    
    @end
    .m文件里可以通过layoutSubviews找到需要做动画的tabItem
    - (void)layoutSubviews{
        [super layoutSubviews];
        for (UIControl *tabBarButton in self.subviews) {
            if ([tabBarButton isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
                [tabBarButton addTarget:self action:@selector(tabBarButtonClick:) forControlEvents:UIControlEventTouchUpInside];
            }
        }
    }
    
    实现点击方法,找系统的私有属性UITabBarSwappableImageView 。这个就是我们今天要找的tab上的imageView
    - (void)tabBarButtonClick:(UIControl *)tabBarButton
    {
        NSInteger index = [self.items indexOfObject:self.selectedItem];
        if (index != self.selectTabBarTag) {
            for (UIView *imageView in tabBarButton.subviews) {
                if ([imageView isKindOfClass:NSClassFromString(@"UITabBarSwappableImageView")]) {
                    [FFTabModel selectTabBarDoScaleAnimationWithView:imageView];
                }
            }
        }
    
        self.selectTabBarTag = index;
    }
    
    #pragma mark - Associated Object
    - (void)setSelectTabBarTag:(NSInteger)object{
        objc_setAssociatedObject(self, @selector(selectTabBarTag), @(object), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    }
    
    - (NSInteger)selectTabBarTag{
        return [objc_getAssociatedObject(self, @selector(selectTabBarTag)) integerValue];
    }
    上边通过私有属性UITabBarSwappableImageView 找到我们想要的imageView然后做相应的动画效果,这里通过runtime运行时,添加属性为NSInteger的selectTabBarTag。目的就是防止重复点击动画,
    但是有时候我们项目中往往第一次进入App选择的并不是第0个item,有存在其他情况。这时候我们就要考虑动画保障点击item无论是任何一个的时候都要肯定出现动画,这里我做了一个判断
    - (instancetype)initWithFrame:(CGRect)frame{
        self = [super initWithFrame:frame];
        if (self) {
            //为保证动画不会重复以及点击动画的正确性,特增加selectTabBarTag, 保证selectTabBarTag和当前tabBarController.selectedIndex一致。
            self.selectTabBarTag = 1;
        }
        return self;
    }

    到这里就写完了,Demo为项目源码。可放心直接拿去使用

    Demo地址

    展开全文
  • 关于阅读器翻页动画的实现,有大把的开源项目可以借鉴,但基本都是基于canvas 2D动画,利用缓存bitmap来处理。绘制需要完全手动绘制。有很多优秀的ios 阅读产品,都可以在阅读页插入翻页视频,以及几大ADDSP的广告...
  • 关于项目的一点 :man::school: 该网站设计考虑了主要UI / UX(即,增加用户参与度) :man::school: :man::laptop_computer: 我在这里使用了现代动画和做法,以使该网站加载速度更快,看起来更时尚 :man::...
  • 欢迎页面包含欢迎消息和一些关于的动画介绍性行。 在桌面上查看时,您会看到彩色的动画覆盖页面右侧。 该动画是使用react代码构建,我打算不时对其进行更新,以使其更好,更有吸引力。 如上图所示,登录页面...
  • 口袋妖怪 Pokedex是一款强大Discord机器人,模仿Pokemon游戏和表演中标志性Pokedex。 它具有许多功能,可以帮助所有技能水平玩家学习和更好地玩...移动-显示有关指定项目的详细信息 能力-显示有关指定能力详细
  • 一个好的产品,无论是页面加载速度,还是响应用户点击动作,都应当非常快,能快速的把响应内容反馈给用户,对于用户而言,快就是使用流畅——不卡。 移动端浏览器现状 现在的...
  • 我喜欢菜单组件之间切换动画的淡入淡出和简单性,并尝试用自己的方式来复制它。 在我的关于我的页面中,我打算拿一张自己的老照片,用计算机来表示我对技术的热情,而这一直是我的热情之一。 我详细介绍了我当前和...
  • 在制作虚拟现实三维动画项目中,很多专业术语是作为一个专业人士你不得不了解,小编就为大家介绍下关于虚拟现实制作中常用一些术语。 虚拟现实技术在近年来有了长足进步,许多读者对于这一行业...
  • 关于项目 这是一个由Jekyll建立个人网站,并托管在Github Pages ,该网站基于新Neumorphism设计趋势并采用移动优先方式开发。 想要展示自己简历和作品集开发人员可以使用它。 如果要在自己网站上使用它...
  • <div><h3>背景 <ul><li>产品的功能越来越多,安卓小程序变得越来越卡,普通手机可能一下子内存就爆了,...那真耗时耗力</p><p>该提问来源于开源项目:Tencent/kbone</p></div>
  • 你会了解如何构建基于XML定制线性布局、如何使用抽象类和定时器任务来模拟简单游戏循环、如何在一个非UI线程中使视图无效,以及如何从项目资源加载sprite和声音,另外还会学习一些绘制技术,如sprite动画、简单...
  • 文件夹-源码

    2021-02-15 11:42:02
    随着我在CSS和HTML专业知识上成长,我将在此模型基础上,最终希望在该项目中添加一些动画和JS。 我尝试将投资组合设计为与原始投资组合近似版本,并进行了一些更改和添加,例如项目的按钮链接。 加载作品集...
  • 电子速写-源码

    2021-02-28 12:26:11
    电子速写 数字和传统艺术电子商务商店。 艺术家在一个地方需要... 设置项目 在Netlify进行部署。 拉紧 付款表格 博客 每个团队成员任务 哈尼恩 哈立德 布什拉 可能 店铺 关于页面 样式> * -- 依类别搜寻 本地存
  • 首先,讲一下关于渲染线程问题,我们的项目产品要求必须效果高大上,显得牛逼华丽无比,这样才有土豪愿意付费。刚开始做动画效果,想要自己定义一个动画框架,但是问题是还有动画编辑器之类。。。。基本上无法...
  •  第1章 关于创意浅谈  1.1 创意是如何诞生  1.2 创意该如何发展  1.3 从作品到产品  第2章 当创意遇上“机器人”  2.1 “机器人”诞生  2.3 创意移动应用  第3章 创意商机  3.1 androidmarket简介 ...
  • 自动循环播放非常适用于一些有关于产品展示演示, 还有在讲演项目策划与融资计划方案时也特别适合。下面是设置自动循环播放后文稿演示效果。 【▲图1】(项目策划) 【▲图2】(融资路演) “选项” – ...
  • asp.net知识库

    2015-06-18 08:45:45
    关于能自定义格式、支持多语言、支持多数据库代码生成器想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

关于动画的产品项目