原生js实现点击添加购物车按钮出现飞行物飞向购物车
效果演示:
思路:核心->抛物线公式
let a = -((y2-y3)*x1 - (x2-x3)*y1 + x2*y3 - x3*y2) / ((x2-x3) * (x1-x2) * (x1-x3));
let b = ((y2-y3)*x1*x1 + x2*x2*y3 - x3*x3*y2 - (x2*x2 - x3*x3)*y1) / ((x2-x3)*(x1-x2)*(x1-x3));
3 let c = ((x2*y3 - x3*y2)*x1*x1 - (x2*x2*y3 - x3*x3*y2)*x1 + (x2*x2*x3 - x2*x3*x3)*y1) / ((x2-x3)*(x1-x2)*(x1-x3));
(x1,y1)----起点坐标 (x2,y2) ----终点坐标 (x3,y3)----最高点坐标
上面的公式主要是来求飞行物top值的,公式 ----top = a*x1*x1+b*x1+c
好了我们来看下完整的代码
.tian{
width: 100px;
height: 30px;
background-color: orange;
line-height: 30px;
text-align: center;
position: absolute;
left:300px;
bottom: 40px;
cursor: pointer;
}
.car{
width: 40px;
height: 40px;
background-color: #9D2933;
position: fixed;
text-align: center;
line-height: 40px;
color:white;
right:40px;
top:200px;
}
.fly{
width: 20px;
height: 20px;
position: absolute;
background-color: #FF0000;
}
css代码
<div class="tian">添加到购物车</div>
<div class="car">0</div>
html代码
class Pao{
constructor(obj) {
this.tian = this.$(obj[0])
this.car = this.$(obj[1])
this.init()
}
$(k){ //获取元素方法
return document.querySelector(k)
}
init(){
let num = 0
this.tian.onclick = e =>{
let x1 = this.tian.offsetLeft
let y1 = this.tian.offsetTop
let x2 = this.car.offsetLeft
let y2 = this.car.offsetTop
let x3 = this.car.offsetLeft - 600
let y3 = this.car.offsetTop + 100
let a = -((y2-y3)*x1 - (x2-x3)*y1 + x2*y3 - x3*y2) / ((x2-x3) * (x1-x2) * (x1-x3));
let b = ((y2-y3)*x1*x1 + x2*x2*y3 - x3*x3*y2 - (x2*x2 - x3*x3)*y1) / ((x2-x3)*(x1-x2)*(x1-x3));
let c = ((x2*y3 - x3*y2)*x1*x1 - (x2*x2*y3 - x3*x3*y2)*x1 + (x2*x2*x3 - x2*x3*x3)*y1) / ((x2-x3)*(x1-x2)*(x1-x3));
let fly = document.createElement('div')
fly.className = 'fly'
fly.style.left = x1 + 'px'
fly.style.top = y1 + 'px'
document.body.appendChild(fly)
let left = x1
let top = y1
let tim = setInterval(()=>{
if(left > x2){
num++
clearInterval(tim)
fly.remove()
this.car.innerText = num
}
left+=10
top = a*left*left+b*left+c
fly.style.left = left + 'px'
fly.style.top = top + 'px'
},1000/60)
}
}
}
new Pao(['.tian','.car'])
js代码
原生js实现点击添加购物车按钮出现飞行物飞向购物车的更多相关文章
- js实现点击不同的按钮后各自返回被点击的次数
js实现点击不同的按钮后各自返回被点击的次数 一.总结 1.注意:返回的不是三个按钮总的点击数,而是每一个的 2.用全局变量的话每一个按钮要多一个函数,用闭包就很方便 二.js实现点击不同的按钮后各自 ...
- 使用原生js 实现点击消失效果
JQ版 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title ...
- JS实现点击参数面板按钮显示或隐藏数据
当报表中列出数据太多时,想通过显示按钮隐藏明细数据只显示统计数据.如下图示例,那么该如何实现呢?本文以FineReport为例,来讲述JS如何实现点击参数面板按钮显示或隐藏数据. 打开报表 在参数面板 ...
- 帆软报表(finereport)JS实现点击参数面板按钮显示或隐藏数据
当报表中列出数据太多时,想通过显示按钮隐藏明细数据只显示统计数据.如下图示例,那么该如何实现呢?本文以FineReport为例,来讲述JS如何实现点击参数面板按钮显示或隐藏数据. 打开报表 在参数面板 ...
- 原生js实现类的添加和删除,以及对数据的add和update、view ,ajax请求 ,页面离开的操作
1 类操作 function hasClass(cla, element) { if(element.className.trim().length === 0) return false; var ...
- 原生 js 实现点击按钮复制文本
最近遇到一个需求,需要点击按钮,复制 <p> 标签中的文本到剪切板 之前做过复制输入框的内容,原以为差不多,结果发现根本行不通 尝试了各种办法,最后使了个障眼法,实现了下面的效果 一.原理 ...
- 原生JS 实现点击按钮创建元素
要求: 点击按钮,随机生成一个20px-100px宽度正方形,随机颜色,随机位置,不能出可视区域外 思路:(1)创建按钮,为按钮添加事件侦听 (2)触发事件,创建一个元素 (3)设置元素样式,包括大小 ...
- 原生JS实现点击一个按钮显示一个div,再点击按钮div隐藏,或点击除div外其它空白处div隐藏
<!DOCTYPE html> <html style="font-size: 24px"> <head> <title>js点击按 ...
- 原生js移除或添加样式
样式效果如下,点击商品详情 添加样式active 代码 <!doctype html> <html lang="en"> <head> < ...
随机推荐
- 利用python在微信群中签到、抢沙发(适用于任何账号)
利用python在微信群中签到.抢沙发 注意 程序仅能在电脑上运行,运行时需要保证群界面在最前端且不被移动. 背景 我是一名高中生(2020年),疫情期间,在家上网课,有的老师让我们在班群里签到. 其 ...
- kafka如何防止key相同的消息并发消费
最开始,我认为只用把消费者设置为单线程消费,就可以避免并发问题. 因为同一个key,分区一定相同,那么就只会被同一个消费者消费,消费者又是单线程,这样就避免了并发问题 后面发现,上述的方式没有办法处理 ...
- Codeforces1138-A(D题)Sushi for Two
Arkady invited Anna for a dinner to a sushi restaurant. The restaurant is a bit unusual: it offers n ...
- xctf-misc 新手区 wp
目录 this_is_flag pdf SimpalRAR ext3 stegano this_is_flag Most flags are in the form flag{xxx}, for ex ...
- tcp/ip 学习笔记zz
http://blog.csdn.net/goodboy1881/category/204448.aspx 坚持看!
- ajax提交可以上传文件的form表单
var formData = new FormData($( "#fm")[0]); $.ajax({ url: 'webnavigationcw ...
- [PHP]用PHP自己写一个基于zoomeye的api(偷懒必备quq)
0x01 起因 因为手速慢,漏洞刷不过别人,一个个手补确实慢,所以想自己写一个api,一键抓取zoomeye的20页,然后就可以打批量了 ovo(真是太妙了!) 0x02 动工 1.抓包做 ...
- 【转载】win10应用商店独立安装包(一键安装) 2020最新版官方正式版
win10应用商店独立安装包(一键安装) 2020最新版官方正式版 Win10 LTSB 2016 / LTSC 2019系统,没有应用商店 需要下载应用商店安装包 蓝盘:https://www.la ...
- docker的file内容解释
关键字---重点啊) FROM 基础镜像,当前新镜像是基于哪个镜像的 MAINTAINER 镜像维护者的姓名和邮箱地址 RUN 容器构建时需要运行的命令 EXPOSE 当前容器对外暴露的端口 WO ...
- OpenStack知识点详解
一:云计算 一.起源 1. 云计算这个概念首次在2006年8月的搜索引擎会议上提出,成为了继互联网.计算机后信息时代的又一种革新(互联网第三次革命). 2. 云计算的核心是将资源协调在一起,使 ...
