618购物节来袭,电商陪你浪浪浪

前言

购物节又要来啦!!(撒花撒花!)零食打折啦!!衣服打折了!!小伙伴们准备好买买买了吗!!!让我看看我还多少余额哈!(满心期待(* ̄︶ ̄))

(10秒后......)

好吧我还是写个电商小程序过过瘾好了。[冷漠脸]

咳咳,让我们进入正题。本人作为一个前端新手,终于完成了一个小项目——电商平台的开发——以此文记录一下我的开发历程,希望在自己总结的同时也能帮助到其他小伙伴。(大家一起加油啦~)

详细介绍

1、主页

话不多说先上动图

???????????(!上错了上错了!图在下面在下面!!!看官们千万别弃文![一本正经脸])


主页包括导航栏、轮播图、图标导航(中间那部分不知道应该怎么形容。。)以及底下用wx:for循环的商品列表。

  • 导航栏


导航栏用的scroll-view组件,设置其水平方向滑动,点击到的字体会变换样式。而且,导航栏点击不同的类别会将主页替换成不同的结构,这就要将最开始的主页结构隐藏起来。我在data中设置 curTag: 0 (默认选中热门类别),点击各个类别会动态改变curTag值;再通过wx:if="{{curTag == 0}}"的判断来隐藏结构。

代码如下:

wxml

    <view class="Block1">
        <scroll-view class="block1" scroll-x="true">
            <view wx:for="{{tabblock}}" data-id="{{index}}" class="blk1tab {{curNav == index? ‘selected‘: ‘‘}}" bindtap="tabClick">{{item.name}}</view>
        </scroll-view>
        <block wx:if="{{curTag == 1}}"><include src="../one/one"/></block>
    </view>
<br>wxss

    .block1 .blk1tab {
        display: inline-block;
        font-size: 22rpx;
        color: #58595b;
        margin: auto 14rpx;
        padding-top: 20rpx;
        border-bottom: 2rpx solid transparent;
    }
    .block1 .selected {
        color: red;
        border-color: red;
    }
<br>js

    tabClick: function(e) {
        var id = e.currentTarget.dataset.id;
        this.setData({
            curNav: id,
            curTag: id
        });
    },
<br>
  • 图标导航

图标来自于[iconfont-阿里巴巴矢量图标库](http://www.iconfont.cn/)<br><br>
图标导航用的也是scroll-view组件,具体讲一下导航滑动时,下方红线进度条跟进的实现。<br>
红线移动即是要动态改变它在水平方向的位置,这是通过scroll-view组件中bindscroll事件实现的;事件触发时可在detail中查询到scrollLeft范围,根据范围再设置红线相应位置即可。<br><br>

代码如下:

wxml

    <scroll-view class="scroll-view" scroll-x="true" bindscroll="scrollMove">
        <view class="block3_blk">
            <block wx:for="{{blkpic1}}">
                <navigator class="blk3pic">
                    <image src="{{item.src}}" class="blkImage" />
                    <view class="blk3title">{{item.title}}</view>
                </navigator>
            </block>
        </view>
        <view class="block3_blk">
            <block wx:for="{{blkpic2}}">
                <navigator class="blk3pic">
                    <image src="{{item.src}}" class="blkImage" />
                    <view class="blk3title">{{item.title}}</view>
                </navigator>
            </block>
        </view>
    </scroll-view>
    <view class="scroll-line">
        <view class="scrollMove" style="left:{{viewleft}}rpx"></view>
    </view>
<br>js

    scrollMove: function(e) {
        var left = e.detail.scrollLeft;
        this.setData({
        viewleft: left
        })
    },

2、商品详情页

详情页有轮播图、弹框和自定义的tabBar;轮播图我就不提了,下面总结下弹框和tabBar的实现。

  • 自定义tabBar


要将tabBar固定在页面底部,只需在样式中将position设为fixed,再设置好left和bottom即可。值得注意的是,此处使用navigator标签跳转到tabBar首页,默认的跳转方式没法实现;需要将navigator的open-type设为switchTab。

wxml如下:

    <navigator class="tabBar_box tabbox" url="../index/index" open-type="switchTab">
        <image class="tab_image" src="../../images/Gshouye.png"></image>
        <view class="tab_name">首页</view>
    </navigator>
<br>
  • 自定义弹框

弹框这部分是两个结构,前面的信息面和后面透明的蒙层。弹框也是用fixed固定住,它的弹出效果可调用小程序api中的wx.createAnimation来实现。弹框弹出后,点击蒙层可以退出弹框;而在这里我还做了一个小细节:弹出后详情页不可滚动。<br><br>
贴上代码:<br><br>
wxml

    <view class="block_back" wx:if="{{block3click}}" bindtap="hideModal"></view>
    <view class="block3_out" wx:if="{{block3click}}" animation="{{animationData}}">
        <view class="blk_out_title">服务说明</view>
        <view class="blk_out_list">
            <view class="list_item" wx:for="{{lists}}">
                <view>
                    <image src="{{item.src}}"></image>
                </view>
                <view class="list">
                    <text class="list_title">{{item.title}}</text>
                    <text class="list_cnt">{{item.content}}</text>
                </view>
            </view>
        </view>
    </view>

js

    serverContent: function(e) {
        var that = this;
        // console.log(e);
        var animation  = wx.createAnimation({
            // 动画持续时间
            duration:200,
            // 动画效果
            timingFunction:‘linear‘
        });
        that.animation = animation
        //在y轴偏移
        animation.translateY(400).step()
        // 让弹框出现
        that.setData({
            block3click: true,
            blockclick: true,
            animationData: animation.export()
        });
        setTimeout(function(){
            animation.translateY(0).step()
            that.setData({
                animationData: animation.export()
            })
        },100)
     },
    //隐藏弹框
    hideModal: function() {
        this.setData({
        block3click: false,
        blockclick: false
        })
    }

弹框出现禁止详情页滚动,即blockclick为true时设置overflow为hidden。


3、选择和支付页面


选择和支付页面存在许多数据交互,比如不同货号对应不同商品图;两个页面中的数据会相互影响,这里我还踩了几个小坑(踩坑有益进步┓(?′?`?)┏)让我慢慢总结。。。

  • 未选择提示


这里没有选择货号就会出现上图的弹框,仍然是true or false的设置;没啥好讲哒,直接上代码啦。

wxml

    <view class="confirm" bindtap="purchaseClick">确定</view>
    <view class="confirmOut" wx:if="{{showOut}}" animation="{{animationData}}">请选择货号</view>
<br>js

    purchaseClick: function() {
        //获取当前选中的货号
        var a = this.data.curNav;
        var that = this;
        //判断是否选中 为空则显示弹框
        if (a == null) {
            that.setData({
                showOut: true
            })
        } else {
            wx.navigateTo({
                url: ‘../pay/pay‘,
            })
        };
        var animation  = wx.createAnimation();
        //延时后隐藏弹框
        setTimeout(function(){
            that.setData({
                animationData: animation.export(),
                showOut: false
            })
        },1500)
    }
  • 选择页和支付页的数据交互

首先是选择页的数据更新,此处都是通过wx:for循环数组来添加信息。


头部的数组中只有一条元素,包括了图片、价格和货号信息,当选择了不同的货号后,就更替头部数组中的元素;请见代码:

头部wxml:

    <view class="pur_hd" wx:for="{{purContent}}">
        <view class="tabBox pur_pic">
            <image class="goodspic" src="{{item.src}}"></image>
        </view>
        <view class="tabBox">
            <view class="price">¥{{item.price}}</view>
            <view class="content">{{item.title}}</view>
        </view>
    </view>
头部js:

    //data中
    purContent: [
        {
            src: "//t00img.yangkeduo.com/t05img/images/2018-06-04/e5162f6d8e3ee7bc5620ae4f7c9c4a42.jpeg",
            price: "9.9-27.9",
            title: "请选择\xa0\xa0货号"
        }
    ]

货号部分wxml:

    <view class="pur_bd">
        <view class="text">货号</view>
        <view class="modalLists {{curNav == index? ‘selected‘ : ‘‘}}" bindtap="selected" wx:for="{{modalLists}}" data-index="{{index}}" >{{item.content}}</view>
    </view>

js

    //data中
    modalLists: [
        {
            src: "//t03img.yangkeduo.com/images/2018-04-17/9b022a30f3a9f10b437a1e19defb20fb.jpeg",
            content:"蓝色经典18包" ,
            price: "20.26",
            title: "已选:蓝色经典18包"
        },
        {
            src: "//t09img.yangkeduo.com/images/2018-04-17/1225b00e178d9042841170ca70e926b8.jpeg",
            content:"蓝色经典27包" ,
            price: "27.9",
            title: "已选:蓝色经典27包"
        },
        {
            src: "//t07img.yangkeduo.com/images/2018-04-17/bcbca6f465fa5e2c1a5628ec10d69089.jpeg",
            content:"蓝色经典8包" ,
            price: "10.9",
            title: "已选:蓝色经典8包"
        },
    ]

    ......

    selected: function(e) {
        //获取当前点中的货号
        var index = e.currentTarget.dataset.index;
        //声明一个空数组
        var list = new Array;
        //将当前点中的货号数组元素添加到list数组中
        list[0] = this.data.modalLists[index];
        //更替头部purContent数组中元素
        this.setData({
            curNav: index,
            purContent: list,
        });
        //本地存储,为支付页传数据
        wx.setStorage({
            key: ‘list‘,
            data: list[0]
        })
    }
选择页完成后,其数据要传递给支付页,包括商品图、数量、价格和货号,同时支付页要统计商品总价。数据的传递我是通过本地存储完成的。将选择页的数据通过wx:setStorage进行存储,再在支付页用wx:getStorage获取数据,通过setData就可以将数据显示出来了。


代码:<br><br>
wxml

    <view class="block3">
        <view class="block3_box">
            <image src="{{src}}"></image>
        </view>
        <view class="box block3_box">
            <view class="box content">27包18包8包 植护原木抽纸300张整箱批发家庭装3层抽去式面巾纸</view>
            <view class="box modal">货号:{{modal}}</view>
            <view class="box price">¥{{price}}/件</view>
        </view>
    </view>

    <view class="block5">
        <view class="block5_box box1">
            <text class="content1">实付款:</text>
            <text class="content2">¥{{total}}</text>
            <text class="content3">免运费</text>
        </view>
        <view class="block5_box box2" >
            <text>立即支付</text>
        </view>
    </view>
<br>js

    data: {
        modal: ‘‘,
        price: ‘‘,
        number: ‘‘,
        src: ‘‘,
        total: ‘‘
    },
    //计算总价
    total: function() {
        var that = this;
        var number = that.data.number,
        var price = that.data.price;
        //.toFixed()保留几位小数
        var total = (number * price).toFixed(1);
        //显示数据
        that.setData({
            total: total
        })
    }

    ......

    //获取本地存储中数据
    var that = this;
    wx.getStorage({
        key: ‘list‘,
        success: function(res){
            var modal = res.data.content;
            var price = res.data.price;
            var src = res.data.src;
            //更新数据
            that.setData({
                modal: modal,
                price: price,
                src: src
            });
        //第一次加载时计算一下总价
        that.total()
        }
    })

这里我加了一个.toFixed()方法,因为没加时数量变化会让小数精确度不一(好吧强迫症犯了,我觉得加了就好看多了hhhhh)。<br><br>
  • 数量加减

商品数量变化是双向的,在选择页的加减要更新到支付页,而在支付页改变数量后也要更新到选择页,这个效果的实现同样通过本地存储。

wxml

    <view class="stepper">
        <!-- 减号 -->
        <view class="normal" data-index="{{index}}" bindtap="bindMinus">-</view>
        <!-- 数量 -->
        <view class="number">{{number}}</view>
        <!-- 加号 -->
        <view class="normal" data-index="{{index}}" bindtap="bindPlus">+</view>
    </view>
<br>js

        //减法
        bindMinus: function() {
            // 字符串转数字类
            var num = parseInt(this.data.number);
            var that = this;
            if (num > 1) {
                num = num - 1;
                that.setData({
                    number: num
                })
            };
            //存储一下
            wx.setStorage({
                key: ‘number‘,
                data: num
            })
        }

        //通过onShow获取本地存储,每次页面显示时都能更新数据
        onShow: function (options) {
            var that = this;
            wx.getStorage({
                key: ‘number‘,
                success: function(res){
                    var number = res.data;
                    that.setData({
                        number: number
                    })
                },
            })
        }

出于严谨性,调动一下parseInt()方法,它可将字符串类型转换成数字类型。<br><br>
注意,选择页在每次加载前都应清空本地存储,不然可能存在加载完成后页面上显示的是上一次调试的数据;因此,可在onLoad中调用wx.clearStorage()。

    onLoad: function (options) {
        wx.clearStorage({
            key: ‘number‘,
            key: ‘list‘
        })
    }
<br>

4、setInterval的使用

一直觉得拼多多的拼团提示很好玩,所以最后忍不住去首页弄一个类似的拼团模块,然后效果嘛。。。总感觉哪里怪怪的??......

其实也是不停地设置true or false来控制模块的显示与否,通过setInterval()来定时,每隔一定时间就对相应值取反,这样就能看到模块闪烁的效果了。

wxml

    <view class="invite_container" wx:if="{{show}}">
        <navigator class="invitation" animation="{{animationData}}" url="../invitation/invitation">
            <view class="invite invite_pic">
                <image src="../../images/touxiang.png"></image>
            </view>
            <view class="invite invite_content">Lesta邀请您一起剁手</view>
        </navigator>
    </view>

js

    onLoad: function() {
        var that = this;
        var animation = wx.createAnimation();
        setInterval(function () {
            var show = !that.data.show;
            that.setData({
                animationData: animation.export(),
                show: show
            })
        }, 1500)
    }
    

什么?你说你想一起剁手嘛??

零食拼不拼??衣服拼不拼?水果拼不拼?

好吧你点进去吧....

结束语

学习永不停歇。作为一个小白,我还有很长的路要去走,还有好多的坑要去跳,那么就在跌跌撞撞中提升吧~感谢各位小(da)伙(lao)伴将我这篇冗长文章看到最后,有哪里不足还请各位小(da)伙(lao)伴多多指教和提点。感谢!

附上我的项目地址:Lesta

原文地址:https://www.cnblogs.com/jlfw/p/11902419.html

时间: 2024-10-22 21:55:01

618购物节来袭,电商陪你浪浪浪的相关文章

京东618: 站在了电商下一轮风口,一定会赢得那个位置

2017年6月1日到6月18日,京东商城累计下单金额达1199亿元,累计卖出商品超过7亿件,这在京东历史上,是一个从未达到的新高度,也是一个新的起点.京东集团副总裁.京东商城居家生活事业部总裁辛利军在6月18日的媒体沟通会上说,"在这个电商行业里面,有的人站在现在的风口上,京东则站在下一轮的风口上,我相信我们会赢得那个位置." "能在网上卖家具吗?" 对于电商来说,家居家装品类是一个特殊的品类.网上购买家居家装品类,特别是买家具的最大担心点就是最后一公里配送和安装.

存储过程造成严重安全后门——记某电商SQL注入安全事件实例分析

3月女人节,电商行业自己创办的节日,着实让爱购物的女人们疯狂了一把.默默躲在屏幕背后的黑手,此时也正值忙碌时期.事后,笔者有幸被邀请参与A公司黑客入侵电商ERP系统安全事件的评估分析.黑客采取的手段和事后的原因追查分析,隐去客户信息,分享给大家,警示防范. 事件起由,公司发现电商ERP系统后台数据库(oracle)被SQL注入,特别严重的是应用所用的普通用户账号被提升为DBA权限:所幸的是入侵者并未对数据库的后台数据进行破坏,比如truncate table或drop database,否则后果

网易严选、京东、天猫、网易考拉海购、微小店,5种电商类原型模板集合(免费使用)

即将到来的618全民购物狂欢节,你的钱包准备好了吗? 说到网上购物,现在电商APP真的是多种多样,虽说充分满足了人们的需求,但真正能够让大家耳熟能详,愿意重复使用的电商类APP却少之又少.这里我们整理了5款较可靠.超人气的电商APP原型模板,来为你的原型设计增添灵感- 原型模板介绍 网易严选 国内首个ODM(原始设计制造商)模式的电商.网易严选APP首页主要集中展示商品内容,有“首页”.“专题”.“分类”.“购物车”.“个人”五个标签导航,分别承担着不同的功能.其中“首页”页面提供“搜索”.“消

亿级流量电商详情页系统的大型高并发与高可用缓存架构实战

对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握redis/memcached等缓存技术的基础使用,最多了解一些集群相关的知识,大部分人都可以对缓存技术掌握到这个程度.然而,仅仅对缓存相关的技术掌握到这种程度,无论是对于开发复杂的高并发系统,或者是在往Java高级工程师.Java资深工程师.Java架构师这些高阶的职位发展的过程中,都是完全不够用的.技术成长出现瓶颈,在自己

社交电商会成为农村电商的破局利器吗?

当前的电商市场巨头云集,传统电商已经基本把市场瓜分完毕,对于许多电商企业来说,农村是挖掘增量用户的潜力市场.因而,在电商渠道下沉到农村,从而迎来电商大热潮之际,传统电商巨头们也蠢蠢欲动.近些年来,农村电商已经成为淘宝.京东等传统电商巨头的发力重心. 不过,在渠道下沉之时,传统电商虽然在一定程度上助力了农村电商的发展,但由于自身模式的局限性,农村电商始终进程缓慢,其仍旧存在许多难以解决的痛点,包括传统农村电商农产品囤积严重.售卖速度慢等问题,而作为农村电商生存的根本,农产品质量的好坏和销售的快慢决

红豆角模式电商直播系统开发定制红豆角直播电商系统开发

红豆角直播电商系统平台开发.红豆角直播模式系统开发找小师 1.8.8-3.8.0.7-6.8.0.5微/电,红豆角直播系统开发,红豆角直播购物系统开发,红豆角直播平台app开发. 随着移动互联网的发展,网红+电商直播系统平台自有的强交互优势和年轻化的用户属性,使得直播+电商这种模式更具年轻化.潮品化,迎合了粉丝的新一轮的消费潮流,让粉丝在购物的同时也能享受到跟主播亲密互动的乐趣和真实性.网红+电商直播系统卖货会在众多电商行业中脱颖而出. 红豆角直播app 是实体店+全景直播+电商=完美诠释新零售

美图也要做电商 能否突破盈利红线仍未知

筹备超过半年,美图的电商业务美铺终于出来了. 作为美图公司押注的重要业务,电商平台被寄予厚望.在去年年底香港的上市记者会上,面对记者对未来盈利质疑时,蔡文胜曾表示,2017年电商业务将为美图带来新的营收增长. 目前,以手机为主的硬件业务仍然占据美图90%%以上的份额,而从最新披露的财报主要业绩看来,互联网营收收入虽有上升但占比仍然不大. 以KOL(意见领袖)人气带动产品销售的美铺平台和定制化产品两大业务为主的电商路径是否能够带动美图业绩走向明朗化?美图有否可能按照蔡文胜预期在今年底达到收支平衡?

电商购物节现“三国杀”局面,苏宁、京东在生鲜板块狭路再相逢

8月3日,生鲜领域再掀风浪,国内最大的全品类生鲜运营平台易果集团获得来自天猫的3亿美元D轮融资.彼时,易果已是苏宁生鲜板块的核心供应商,为苏宁生鲜的品质和服务保驾护航超过半年之久. 进入2017年,生鲜电商热度回暖,各大巨头对生鲜品类的关注度也逐渐提高.不是冤家不聚头,上个月京东刚刚宣布了上半年的业务成果,很快苏宁就打响了818发烧购物节,尤其在生鲜板块升级"苏鲜生"为苏宁生鲜.生鲜作为苏宁818一大重要发力点,其战略意义得到了明显提升. 从苏宁818冲击电商三大节的举措来看,又一场&

618驾到 带你揭开电商成交额背后的秘密

618年中购物大狂欢已进入倒计时,你是不是每天都要去各电商平台转转,并期待着清空购物车?那么你知道电商的成交额是如何快速直观实时呈现的吗?下面为你揭开电商成交额背后的秘密.说到电商"造节",最具代表性的莫过于天猫双11.2018年11月11日24时,随着最终数字的定格,2018年 天猫"双11"成交额突破2000亿大关,再次刷新纪录.从2009年首个双11,交易峰值仅400笔/秒:到2018年交易创建峰值高达49.1万笔/秒.如此巨大的交易峰值,流计算技术可谓是功不