Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >商品添加到购物车动画getBoundingClientRect获取元素位置

商品添加到购物车动画getBoundingClientRect获取元素位置

作者头像
javascript.shop
发布于 2019-09-04 08:34:23
发布于 2019-09-04 08:34:23
1.7K00
代码可运行
举报
文章被收录于专栏:杰的记事本杰的记事本
运行总次数:0
代码可运行

语法

1.语法:这个方法没有参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        rectObject = object.getBoundingClientRect();

2.返回值类型: rectObject.top:元素上边到视窗上边的距离;

rectObject.right:元素右边到视窗左边的距离;

rectObject.bottom:元素下边到视窗上边的距离;

rectObject.left:元素左边到视窗左边的距离;

3. IE67的left、top会少2px,并且没有width、height属性。

效果图

实现功能

1. 联动菜单

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<li v-for="(item, index) in navs" 
    :key="index" 
    :class="{click: selector==index}"
    @click="toHash(item, index)">
    {{item}}
</li>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 点击右侧导航栏
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var obj = element.getBoundingClientRect();

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 标题栏粘性定位

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#el {
    position: sticky;
    top: 0;
}

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

2. 按钮缓慢弹出

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <div :class="{pop: true, mov: item.num>0}">
    <!---->
 </div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.pop {
    display: inline-block;
    position: relative;
    left: 48px;
    opacity: 0;
    transition: all ease .5s;
}
.mov {
    left: 0;
    opacity: 1;
}

3.小球飞入购物车动画

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 运动的小球 -->
<div id="points">
    <div class="pointOuter pointPre">
        <div class="point-inner"></div>
    </div>  
    <!--其他n个小球-->
</div>

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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运动完以后会令它恢复到原来的位置,你想想,小球一共就只有那么几个,如果不恢复的话下次用户点击了小球就不够啊…

总结

以上是饿了么购物车模块主页面的几个主要技术点。上面的DOM操作可以改成使用vue的动画组件 transition 进行优化,感觉会更好,我在项目中使用了transition组件进行优化,代码更加简洁。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年3月12日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用vue模拟购物车小球动画
使用vue模拟购物车小球动画 1.效果演示 image 2.相关代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"
Dream城堡
2018/12/06
1.5K0
简单实用的商品购物和添加购物车UI设计
这是一款使用jQuery和CSS3制作的简单实用的商品购物和添加购物车界面设计方案。用户可以在商品购物界面中预览各种型号、颜色、尺寸的商品。然后通过点击添加到购物车按钮就可以将该商品添加到购物车中,操作简单直观。
用户5997198
2019/08/09
1.8K0
简单实用的商品购物和添加购物车UI设计
每日分享html特效篇之一个菜单栏、一个渐变背景、一个加载特效、七个导航栏特效
1.前端工程师主要利用HMTL与CSS建构页面(其中html构建骨架,css构建样式),用JavaScript获取后端数据以及完善交互以及用户体验。 2.通俗来讲,前端在一个项目里,拿到UI设计师设计的设计稿,然后实现UI设计师设计稿,调用后端程序员给的数据接口以获取数据,然后测试,最后部署上线。 3.前端可以对设计图负责,大部分情况下,不需要特别的去理解业务逻辑,因为我们90后都是玩着十几年手机电脑长大的,十几年的经验足够我们在潜意识里想明白应该怎么做,怎么去一步步实现,会有什么意外情况。 4.我感觉前端发展有个很大的缺陷----晋升问题. 正如第三点所言,作为领导必须对项目有足够的了解,显然是要重点包括业务逻辑,这点上,后端开发者需要涉及数据库逻辑,是必须要跟业务逻辑打交道的(重中之重),因此,大部分的领导岗位都是后端开发者更有晋升的机会。当然,个别公司有专门的前端组长(这也不算什么),如果说前端开发者在自己工作范围之外还要腾出时间去研究业务逻辑,属实是觉得出力不讨好(因为这样的操作需要持续很久才能看出效果),而且再怎么研究业务逻辑也不会比每时每刻跟业务逻辑打交道的后端开发者了解更多。说实在的,大部分情况下,前端在配合后端进行开发.后端需要了解业务逻辑,要跟领导和客户商量细节,露脸机会很大,在老板面前刷脸次数众多。这些都是拉开前后端程序员晋升机会差距的因素。
淼学派对
2022/11/20
2.5K0
每日分享html特效篇之一个菜单栏、一个渐变背景、一个加载特效、七个导航栏特效
JavaScript实现 满天星 导航栏
实现这个效果,需要掌握的知识不用很多,知道简单的CSS,会用JS 获取元素, 能绑定事件基本就足够了。 好的,我们直接来看代码,注释已经写的很详细了,不想看有注释的,点这里。
FEWY
2019/05/27
1K0
CSS固定定位与粘性定位4大企业级案例
前面两篇文章为大家详细讲解了相对定位与绝对定位的应用场景和案例。如果想了解的可以在公众号里面查看去看。本小节我们学习下固定定位与粘性定位的应用场景和案例。
艾编程
2022/12/11
1.7K0
CSS固定定位与粘性定位4大企业级案例
VUE实现一个购物车
想象每个组件都分别为家中的成员:爸爸、妈妈、孩子们。但是,作为一个家庭,他们需要共享状态。在这个家庭中,充当看家狗的Vuex就是来帮助我们解决问题的。
HelloWorldZ
2024/03/20
1900
VUE实现一个购物车
VUE实战—商品控件与购物车联动(9)
在商品组件的<template>标签内完成项目结构,以及数据,事件的绑定,与判断逻辑的书写。
前端大彬哥
2019/07/22
8410
VUE实战—商品控件与购物车联动(9)
原生:点击加入购物车的动画
HTML <div class="fly-cart"> <div class="wrapper"> <span><i class="shopping-cart"></i></span> <div class="clear"></div> <div class="items"> <div class="item fly-item1"> <div class="item-img"> <img src
yuezhongbao
2019/02/26
1.3K0
原生:点击加入购物车的动画
从零开始摸索VUE,配合Golang搭建导航网站(十六.CSS动画初探)
上篇完善了一下一些CSS的问题。今天想锦上添花学习加点特效,很不幸最初想模仿的名叫馨客栈的网站倒闭了。网络域名过期了,只能根据最初的印象做了。等再找找其他的网站再继续模仿其他优秀的细节~
玖柒的小窝
2021/11/16
6840
从零开始摸索VUE,配合Golang搭建导航网站(十六.CSS动画初探)
电商左侧商品分类菜单实现
电商左侧商品分类菜单实现 无论是pc端还是手机端,都有类似左侧分类,点击后右侧切换内容的功能页面。 要想实现这个功能,首先第一步是要掌握左右布局的方法。 左右布局 推荐使用flex弹性布局 .parent { display: flex; } .left { width: 200px; height: 100%; background-color: red; } .right { display: flex; flex: 1; height: 1
我的小熊不见了丶
2019/10/14
2.4K0
【Vue H5项目实战】从0到1的肯德基点餐系统—— 商品与购物车逻辑设计(Vue3.2 + Vite + TS + Vant + Pinia + Nodejs
文章链接:https://cloud.tencent.com/developer/article/2473693
中杯可乐多加冰
2024/12/04
2140
jquery 加入购物车示例
仅供学习,转载请注明出处 编写一个加入购物车的按钮,然后动画一个圆点到购物车,同时数量加1。 淡定直接写出基本html以及css,如下: 根据点击加入购物车的位置,增加一个红色的圆形 编写jque
Devops海洋的渔夫
2019/06/02
1.5K0
23个项目管理经典案例_交互动画
注意: speed = (end - box.offsetLeft)/20; 代表用(终点位置-当前位置)/动画系数 动画系数可以控制动画的快慢
全栈程序员站长
2022/11/03
1.8K0
FLIP,一种高端优雅但简单易用的前端动画思维
有一种能够快速实现复杂动画交互的动画思维 FLIP,为了介绍这个动画思维,我准备了三个案例,大家可以在上面的视频中观看。
用户6901603
2024/01/25
9240
FLIP,一种高端优雅但简单易用的前端动画思维
CSS笔记(14)
定位模式用于指定一个元素在文档中的定位方式,边偏移则决定了该元素的最终位置.
y191024
2022/09/20
6250
CSS笔记(14)
京东购物车网页(静态)搭建
二、项目环境 1、软件环境:Win10+HBuilder+Chrome浏览器 2、项目思路 : 根据需要实现的效果,自上而下,依次实现导航栏、搜索框、标题栏、商品详情展示框、结算窗口的编写。
时间静止不是简史
2020/07/24
2K0
京东购物车网页(静态)搭建
原生HTML+CSS+JS制作自己的导航主页(前端大作业,源码+步骤详解)
咕咕了好久啦,今天使用原生HTML+CSS+JS做一个很简单的个人定制的导航主页吧!
全栈程序员站长
2022/09/15
7K2
原生HTML+CSS+JS制作自己的导航主页(前端大作业,源码+步骤详解)
「JavaScript 」动画基础 - 02
请注意,本文编写于 2085 天前,最后修改于 173 天前,其中某些信息可能已经过时。
曼亚灿
2023/05/17
3970
前端懒加载和预加载
懒加载和预加载的目的都是为了提高用户的体验,二者行为是相反的,一个是延迟加载,另一个是提前加载。懒加载对缓解服务器压力有一定作用,预加载则会增长服务器前端压力缓存。
hellocoder2029
2022/10/21
2.3K0
导航栏滚动吸顶并自动高亮和点击跳转锚点
在阿里云的云市场页面上有一个效果,就是api导航栏当滚动条滚动到其所在位置时,自动吸顶,当滚动到下方所在导航栏指定的介绍时,自动高亮其导航栏。点击时则会滑动至其内容所在位置。具体效果为下图样式。
OECOM
2021/01/20
10.7K0
导航栏滚动吸顶并自动高亮和点击跳转锚点
推荐阅读
相关推荐
使用vue模拟购物车小球动画
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验