微信小程序实现加入购物车滑动轨迹


Posted in Javascript onNovember 18, 2020

本文实例为大家分享了微信小程序实现加入购物车滑动轨迹的具体代码,供大家参考,具体内容如下

微信小程序实现加入购物车滑动轨迹

index.wxss

.good_box {
 width: 80rpx;
 height: 80rpx;
 position: fixed;
 border-radius: 50%;
 overflow: hidden;
 left: 50%;
 top: 50%;
 z-index: 99;
}

index.wxml

<view class="iconfont icongouwuche recommend_item_shopcar" bindtap="touchOnGoods"></view>
<view class="good_box" hidden="{{hide_good_box}}" style="left: {{bus_x}}px; top: {{bus_y}}px;">
 <image class="image" src="/img/luntai2.png"></image>
</view>

**app.js **

//app.js
App({
 onLaunch: function() {
 //调用API从本地缓存中获取数据
 // var logs = wx.getStorageSync('logs') || []
 // logs.unshift(Date.now())
 // wx.setStorageSync('logs', logs)
 this.screenSize();
 },
 getUserInfo: function(cb) {
 var that = this
 if (this.globalData.userInfo) {
  typeof cb == "function" && cb(this.globalData.userInfo)
 } else {
  //调用登录接口
  wx.login({
  success: function() {
   wx.getUserInfo({
   success: function(res) {
    that.globalData.userInfo = res.userInfo
    typeof cb == "function" && cb(that.globalData.userInfo)
   }
   })
  }
  })
 }
 },
 //获取屏幕[宽、高]

 screenSize: function() {
 var that = this;
 wx.getSystemInfo({
  success: function(res) {
  that.globalData.ww = res.windowWidth;
  that.globalData.hh = res.windowHeight;
  }

 })

 },

 /**
 
  * @param sx 起始点x坐标 
  * @param sy 起始点y坐标 
  * @param cx 控制点x坐标 
  * @param cy 控制点y坐标 
  * @param ex 结束点x坐标 
  * @param ey 结束点y坐标 
  * @param part 将起始点到控制点的线段分成的份数,数值越高,计算出的曲线越精确 
  * @return 贝塞尔曲线坐标
 
  */

 bezier: function(points, part) {

 let sx = points[0]['x'];
 let sy = points[0]['y'];
 let cx = points[1]['x'];
 let cy = points[1]['y'];
 let ex = points[2]['x'];
 let ey = points[2]['y'];
 var bezier_points = [];

 // 起始点到控制点的x和y每次的增量
 var changeX1 = (cx - sx) / part;
 var changeY1 = (cy - sy) / part;

 // 控制点到结束点的x和y每次的增量
 var changeX2 = (ex - cx) / part;
 var changeY2 = (ey - cy) / part;

 //循环计算
 for (var i = 0; i <= part; i++) {
  // 计算两个动点的坐标

  var qx1 = sx + changeX1 * i;
  var qy1 = sy + changeY1 * i;
  var qx2 = cx + changeX2 * i;
  var qy2 = cy + changeY2 * i;

  // 计算得到此时的一个贝塞尔曲线上的点
  var lastX = qx1 + (qx2 - qx1) * i / part;
  var lastY = qy1 + (qy2 - qy1) * i / part;

  // 保存点坐标
  var point = {};
  point['x'] = lastX;
  point['y'] = lastY;
  bezier_points.push(point);

 }

 //console.log(bezier_points)
 return {
  'bezier_points': bezier_points

 };

 },
 globalData: {
 ww:'',
 hh:''
 }
})

index.js

//index.js
//获取应用实例
const app = getApp()

Page({
 data: {
 indicatorDots: true,
 vertical: false,
 autoplay: false,
 interval: 2000,
 duration: 500,
 hide_good_box: true,
 },
 onLoad: function () {
 this.busPos = {};

 this.busPos['x'] = app.globalData.ww / 1.4; //1.4修改轨迹结束时x轴的位置,2是在正中心

 this.busPos['y'] = app.globalData.hh - 10;

 console.log('购物车坐标', this.busPos)
 },
 onShow(){
 app.editTabBar(); //显示自定义的底部导航
 },
 tosearchpage(e){
 wx.navigateTo({
  url: '',
 })
 },
 touchOnGoods: function (e) {
 // 如果good_box正在运动
 if (!this.data.hide_good_box) return;
 this.finger = {};
 var topPoint = {};
 this.finger['x'] = e.touches["0"].clientX;
 this.finger['y'] = e.touches["0"].clientY;

 if (this.finger['y'] < this.busPos['y']) {
  topPoint['y'] = this.finger['y'] - 150;
 } else {
  topPoint['y'] = this.busPos['y'] - 150;

 }
 topPoint['x'] = Math.abs(this.finger['x'] - this.busPos['x']) / 2;
 if (this.finger['x'] > this.busPos['x']) {
  topPoint['x'] = (this.finger['x'] - this.busPos['x']) / 2 + this.busPos['x'];
 } else {
  topPoint['x'] = (this.busPos['x'] - this.finger['x']) / 2 + this.finger['x'];

 }

 this.linePos = app.bezier([this.finger, topPoint, this.busPos], 20);
 this.startAnimation();

 },

 startAnimation: function () {
 var index = 0,
  that = this,
  bezier_points = that.linePos['bezier_points'],
  len = bezier_points.length - 1;
 this.setData({

  hide_good_box: false,
  bus_x: that.finger['x'],
  bus_y: that.finger['y']

 })

 this.timer = setInterval(function () {
  index++;
  that.setData({
  bus_x: bezier_points[index]['x'],
  bus_y: bezier_points[index]['y']
  })

  if (index >= len) {
  clearInterval(that.timer);
  that.setData({
   hide_good_box: true,

  })

  }

 }, 15);

 },
})

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
Jan 23 Javascript
JS操作iframe里的dom(实例讲解)
Jan 29 Javascript
javascript(js)的小数点乘法除法问题详解
Mar 07 Javascript
Google Maps API地图应用示例分享
Oct 23 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
Dec 12 Javascript
微信小程序中实现手指缩放图片的示例代码
Mar 13 Javascript
vue单页缓存方案分析及实现
Sep 25 Javascript
详解JavaScript的变量
Apr 04 Javascript
webpack 最佳配置指北(推荐)
Jan 07 Javascript
vue中配置scss全局变量的步骤
Dec 28 Vue.js
Map与WeakMap类型在JavaScript中的使用详解
Nov 18 #Javascript
解决js中的setInterval清空定时器不管用问题
Nov 17 #Javascript
springboot+vue实现文件上传下载
Nov 17 #Vue.js
vue 表单输入框不支持focus及blur事件的解决方案
Nov 17 #Vue.js
解决vue elementUI 使用el-select 时 change事件的触发问题
Nov 17 #Vue.js
Vue项目利用axios请求接口下载excel
Nov 17 #Vue.js
vue实现下载文件流完整前后端代码
Nov 17 #Vue.js
You might like
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
php四种定界符详解
2017/02/16 PHP
详解php用static方法的原因
2018/09/12 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
javascript forEach通用循环遍历方法
2010/10/11 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
jquery在IE、FF浏览器的差别详细探讨
2013/04/28 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
jQuery Ajax 全局调用封装实例代码详解
2016/06/02 Javascript
原生JS和jQuery操作DOM对比总结
2017/01/19 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
vue实现信息管理系统
2020/05/30 Javascript
Python实现partial改变方法默认参数
2014/08/18 Python
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
将pip源更换到国内镜像的详细步骤
2019/04/07 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
生产部主管岗位职责
2014/01/06 职场文书
入党积极分子介绍信
2014/01/17 职场文书
召开会议通知范文
2015/04/15 职场文书
小人国观后感
2015/06/11 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
用JS创建一个录屏功能
2021/11/11 Javascript