购物车抛物线添加商品

购物车是我们做项目的一个重点,在做购物车时我们如何让商品以抛物线的形式加入购物车呢?

先画图分析一下:

在画图的同时将思路一并列了出来,接下来我们只需将思路用代码展示出来就ok了。

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <title>购物车</title>  
    <style>  
        *{
            margin:0;
            padding:0;
        }
        #addToCart {  
            position: fixed;  
            left: 600px;  
            cursor: pointer;  
            width: 100px;  
            height: 40px;  
            line-height: 40px;  
            border: 1px solid deeppink;  
            text-align: center;  
            color: deeppink;  
            top:500px;
        }  
        #addToCart:hover {  
            color: #fff;  
            background-color: deeppink;  
        }  
  
        #shopCart {  
            position: fixed;  
            right: 0;  
            top: 200px;  
            color: red;  
        }  
        #shopNum{
            width: 60px;
            height: 25px;
            background: deeppink;
            color:black;
            text-align: center;
            line-he0ight: 25px;
        }
        .good {
            width: 20px;
            height: 20px;
            background: palevioletred;
            position: absolute;
        }
    </style>
    <body>
        <div id="addToCart">  
           添加到购物车  
        </div>      
        <div id="shopCart">  
            购物车  
          <p id="shopNum"></p>
        </div>
    </body>
</html>  
<script type="text/javascript">
     /*
     addToCart.onclick = function(){
         第一步 : 
             确定三点坐标
             起始点:
                 startPoint = {
                     x : addToCart.offsetLeft + addToCart.offsetWidth/2,
                     y : addToCart.offsetTop
                 }
             结束点
                 endPoint = {
                     x : shopCart.offsetLeft + shopCart.offsetWidth/2,
                     y : shopCart.offsetTop
                 }
             最高点
                 topPoint = {
                     x : endPoint.x - 100,
                     y : endPoint.y - 70
                 }
         第二步 : 
             根据三点坐标确定抛物线系数 a  b  c
             var a = ((startPoint.y - endPoint.y) * (startPoint.x - topPoint.x) - (startPoint.y - topPoint.y) * (startPoint.x - endPoint.x)) / ((startPoint.x * startPoint.x - endPoint.x * endPoint.x) * (startPoint.x - topPoint.x)-(startPoint.x * startPoint.x - topPoint.x * topPoint.x) * (startPoint.x - endPoint.x));  
            
            var b = ((endPoint.y - startPoint.y) - a * (endPoint.x * endPoint.x - startPoint.x * startPoint.x)) / (endPoint.x - startPoint.x);  
            
            var c = startPoint.y - a * startPoint.x * startPoint.x - b * startPoint.x;
         第三步 : 
             确定抛物线方程
         第四步 : 创建商品 并设置商品的起始位置(起始点坐标)
         第五步 : 通过定时器  让商品运动起来  改变商品的left和top值
         left 就是抛物线方程中的x
         top  就是抛物线方程中的y
         第六步 : 当商品运动到购物车位置处  停止定时器  数量自增  删除商品
     }
     * */
     var num = 0;
     addToCart.onclick = function(){
         //第一步 : 确定三点坐标
             //起始点:
                 var startPoint = {
                     x : addToCart.offsetLeft + addToCart.offsetWidth/2,
                     y : addToCart.offsetTop
                 }
             //结束点
                 var endPoint = {
                     x : shopCart.offsetLeft + shopCart.offsetWidth/2,
                     y : shopCart.offsetTop
                 }
             //最高点
                 var topPoint = {
                     x : endPoint.x - 100,
                     y : endPoint.y - 70
                 }
         //第二步 : 根据三点坐标确定抛物线系数 a  b  c
             
             var a = ((startPoint.y - endPoint.y) * (startPoint.x - topPoint.x) - (startPoint.y - topPoint.y) * (startPoint.x - endPoint.x)) / ((startPoint.x * startPoint.x - endPoint.x * endPoint.x) * (startPoint.x - topPoint.x)-(startPoint.x * startPoint.x - topPoint.x * topPoint.x) * (startPoint.x - endPoint.x));  
            
            var b = ((endPoint.y - startPoint.y) - a * (endPoint.x * endPoint.x - startPoint.x * startPoint.x)) / (endPoint.x - startPoint.x);  
            
            var c = startPoint.y - a * startPoint.x * startPoint.x - b * startPoint.x;
        //第三步 : 确定抛物线方程var y = a*x*x + b*x + c;
        
        //第四步 : 创建商品 并设置商品的起始位置(起始点坐标)
        var good = document.createElement("div");
        good.className = "good";
        document.body.appendChild( good );
        var x = startPoint.x;
        var y = startPoint.y;
        //设置商品的起始位置
        good.style.left = x + "px";
        good.style.top = y + "px";
        
        /*
         第五步 : 通过定时器  让商品运动起来  改变商品的left和top值
         left 就是抛物线方程中的x
         top  就是抛物线方程中的y
        */
        var timer = setInterval( function(){
            //根据抛物线方程 确定抛物线轨迹坐标
            x = x + 3;
            y = a*x*x + b*x + c;
            if( x > endPoint.x ){
                clearInterval(timer);
                good.remove();
                shopNum.innerHTML = ++num;
            }else{
                good.style.left = x + "px";
                good.style.top = y + "px";
            }
        },20 )
     }
</script>

 

posted @ 2019-01-17 10:19  kinoko-木子  阅读(327)  评论(0编辑  收藏  举报