饿了么购物车动画

前言

之前用饿了么印象最深刻的是联动菜单和小球飞入购物车动画,所以想看看别人是怎么实现的,但是看了很多仿饿了么的demo都是实现了一个完整的大的项目,要找到那个小模块很麻烦,所以自己将联动菜单和动画提取出来写了一个demo,方便学习。

目的只是想突出功能所以界面细节很relax,大家也relax的看看吧~

效果图

实现功能

1. 联动菜单

1.1 用户点击左侧导航栏会跳转到相应的内容

这个很简单,给导航栏的每一个元素加一个点击事件,其实也可以通过a标签的锚点来实现

<li v-for="(item, index) in navs"
    :key="index"
    :class="{click: selector==index}"
    @click="toHash(item, index)">
    {{item}}
</li>
// 点击右侧导航栏
toHash(item, index) {
    this.selector = index;
    window.location.hash = item; 

    // 导航栏向上滚动相应距离,一个li的高度为54px
    this.$refs.left.scrollTop = (index > 7 ? index-7 : 0)*54;
}

1.2 用户滑动右侧的内容左侧的导航栏会响应式改变

右侧内容监听一个scroll事件,当触发滑动事件的时候获取粘性定位在顶部的标题,根据标题使导航栏定位到相应的li

var obj = element.getBoundingClientRect();

上述api返回一个对象obj,该对象有left、top等属性,可以根据该属性获得element元素在页面的位置

listScroll() {
    // 为了达到联动效果,右侧滑动则改变左侧导航栏样式
    var titles = document.getElementsByClassName(‘goodTitle‘);
    for(var i = 0; i < titles.length; i++) {
        var style = titles[i].getBoundingClientRect();
        if(style.top == 107) {
            this.toHash(titles[i].innerHTML, i);
        }
    }
}

1.3 标题栏粘性定位

#el {
    position: sticky;
    top: 0;
}

该元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。这也实现了内容区标题栏始终在顶部的效果。关于粘性定位更多的可以看这里

2. 按钮缓慢弹出

当我们点击添加按钮的时候其他的内容会缓慢弹出,这个是靠css的动画实现的。

我们先将个数减少按钮和被选中物品个数num的left设为48px,使其被隐藏。点击添加按钮时选择物品个数大于0则让left变为0达到一个缓慢弹出的动画效果。

 <div :class="{pop: true, mov: item.num>0}">
    <!---->
 </div>
.pop {
    display: inline-block;
    position: relative;
    left: 48px;
    opacity: 0;
    transition: all ease .5s;
}
.mov {
    left: 0;
    opacity: 1;
}

3.小球飞入购物车动画

先准备n个小球,为什么不是一个呢?因为如果用户连续点击添加可能会出现小球不够的情况,所以需要多个小球。

<!-- 运动的小球 -->
<div id="points">
    <div class="pointOuter pointPre">
        <div class="point-inner"></div>
    </div>
    <!--其他n个小球-->
</div>

令小球为绝对定位这样可以改变它的left和top。

动画实现思路:用户点击添加时将一个小球的位置设置为被点击元素的位置,且获取目的地位置(购物车位置),当小球抛出时使其运动方式按照贝塞尔曲线过渡。

increase(index1, index2, event) { 

    // some code...

    // 小球动画
    var top = event.clientY, // 小球降落起点
        left = event.clientX,
        endTop = window.innerHeight - 30,  // 小球降落终点
        endLeft = 20; 

    // // 小球到达起点并去掉小球的display: none;
    var outer = $(‘#points .pointPre‘).first().removeClass("pointPre").css({
        left: left + ‘px‘,
        top: top + ‘px‘
    });
    var inner = outer.find(".point-inner"); 

    setTimeout(function() {
        // 将jquery对象转换为DOM对象
        outer[0].style.webkitTransform = ‘translate3d(0,‘ + (endTop - top) + ‘px,0)‘;
        inner[0].style.webkitTransform = ‘translate3d(‘ + (endLeft - left) + ‘px,0,0)‘;

        // 小球运动完毕恢复到原点
        setTimeout(function() {
            outer.removeAttr("style").addClass("pointPre");
            inner.removeAttr("style");
        }, 1000);  //这里的延迟值和小球的运动时间相关
    }, 1);
}

注意点:

  • 嵌套的setTimeout中的时间之所以设置为1s,是因为css中规定的小球运动时间为1s,所以在小球1s运动完以后会令它恢复到原来的位置,你想想,小球一共就只有那么几个,如果不恢复的话下次用户点击了小球就不够啊...

总结

以上是饿了么购物车模块主页面的几个主要技术点,这个demo注重功能所以UI什么的没有完全copy饿了么,大家也可以把项目fork下来自己添加组件来扩充成一个高仿的饿了么购物车模块。

源码地址:vue-eleme-shoppingCart

原文地址:https://www.cnblogs.com/wind-lanyan/p/8964545.html

时间: 2024-08-03 00:34:24

饿了么购物车动画的相关文章

仿饿了么购物车下单效果

仿饿了么购物车下单效果 前一段由于新项目需要,开发一个类似饿了么购物车下单效果,电商类.外卖类.点餐类项目都可以用的上,废话不多说请看效果. 效果图如下: 主要的功能: 就是左侧展示分类,右侧展示分类下商品的,点击右侧分类下的商品,如果商品是套餐类型的话,点击可以看套餐详情,下单选择完商品后,可以在购物车里面添加或减少商品数量. 主要功能实现: 1:分类及商品及购物车里面商品数量的联动效果 2:底部购物车商品列表 3:选择左侧分类效果 4:添加商品是有0到1,减少商品有1到0动画效果 5:下单动

【转】Android 实现蘑菇街购物车动画效果

原文出处:http://blog.csdn.net/wangjinyu501/article/details/38400479 1.思路 目前想到两种方式实现这种效果,一是使用Tween动画,直截了当的进行一个移动,蘑菇街就是使用这样的方法.二是使用WindowManager创建一个View,然后对这个View进行移动. 2.实现 本文先用方式一方法实现,之后会用方式二方法实现. 方式一: Activity代码: 1 package com.kince.mogujie; 2 3 import a

iOS手机淘宝加入购物车动画分析

本文转载至 http://www.jianshu.com/p/e77e3ce8ee24 1.最终效果 仿淘宝动画 2.核心代码 _cartAnimView=[[UIImageView alloc] initWithFrame:CGRectMake(_propView.frame.size.height*0.025,_propView.frame.size.height* -0.025 , _propView.frame.size.height*0.2, _propView.frame.size.

Android 实现蘑菇街购物车动画效果

版本:1.0 日期:2014.8.6 版权:© 2014 kince 转载注明出处 使用过蘑菇街的用户基本上都知道有一个加入购物车的动画效果,此处不具体描述想知道的可以去下载体验一下. 1.思路 目前想到两种方式实现这种效果,一是使用Tween动画,直截了当的进行一个移动,蘑菇街就是使用这样的方法.二是使用WindowManager创建一个View,然后对这个View进行移动. 2.实现 本文先用方式一方法实现,之后会用方式二方法实现. 方式一: Activity代码: package com.

javascript仿天猫加入购物车动画效果

  注意:首先需要声明的是:代码原思路不是我写的,是在网上找的这种效果,自己使用代码封装了下而已:代码中都有注释,我们最主要的是理解抛物线的思路及在工作中完成这样的任务,最近需要做类似于天猫加入购物车动画效果,所以就在网上搜索了下,就看到类似的效果,就把代码截下来自己封装了下~~ 如果想要了解抛物线的细节,我建议大家先 看下 张鑫旭 讲解的抛物线的文章,再来看如下JS代码,可能理解更深点~~ http://www.zhangxinxu.com/wordpress/2013/12/javascri

android animation——添加购物车动画(填坑和优化)

我们经常看到不管是某宝还是某东都有加入购物车的动画.就是在点击某个商品后,这个商品变成小的缩略图移动到购物车里面去. 今天突然想着把原来做过的这么一个动画贴出来供大家学习. 先看效果图.gif工具不忍直视,真实操作是很流畅的一个抛物线. 首先从效果图看出来我们需要几个东西. 1,动画的开始位置 2,动画的结束位置 3,动画移动的图片(这里为了简单用一个小圆点,可以换成商品的缩略图) 4,动画的弧度如何处理 5,动画完成后在哪里操作数据 6,连续点击图片动画时如何new出多个动画 那么我们就来解决

iOS 手机淘宝加入购物车动画分析

1.最终效果 仿淘宝动画 2.核心代码 _cartAnimView=[[UIImageView alloc] initWithFrame:CGRectMake(_propView.frame.size.height*0.025,_propView.frame.size.height* -0.025 , _propView.frame.size.height*0.2, _propView.frame.size.height*0.2)]; [self.view addSubview:_cartAni

vue小球加入购物车动画实现

小球加入购物车动画代码部分 分析: 涉及到的核心API getBoundingClientRect() 原文地址:https://www.cnblogs.com/malong1992/p/12083602.html

css贝塞尔曲线模仿饿了么购物车小球动画

在线观看贝塞尔曲线值:传送门 在线观看动画效果:传送门 代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> <style> html{ widt