京东会员/积分系统分析

电商的会员系统—-动态平衡

前提:电商的会员系统与QQ会员系统不同,荣誉激励因素于小。

目的:用户分层运营,将全方位用户体系划分成一个金字塔结构,给大值之用户提供更上的劳务。

怎分层,如何判定一个用户是青出于蓝价值用户?

  1. 消费
  2. 请频度高
  3. 用户自己素质强,无恶意退换货等
  4. 帮忙平台构建产品形象
  5. 平台忠实度

京东底政策:

成人值=(登录+购物+购物天数+评价+晒单)*成长系数

  1. 登录、评价及晒单 = 对平台的忠实度
  2. 购物 = 消费
  3. 每月购物天数 = 购买频度
  4. 晒单和评论 = 帮助平台构建产品形态
  5. 用户素质 = 成长系数
    ps:京东在策略选择上,也考虑了针对性用户作为的导。

成长系数

场面:有些用户虽然交易量高,但是时使用无理由退货权益,乱买商品,造成运营本钱居高不下。成长系数即是一个神作,把这些用户区分了下。在尚未京东经济的私家体系之前,根据用户的退换货的百分比,系统开展确定;现在金融做起来后,直接运用小白信用作为指标。

会员权益:

  1. 下单优惠: 金银铜会员价
  2. 配送优惠/及时:免运费门槛
  3. 售后:单免/双免
  4. 客服服务:VIP专线
  5. 结关怀:生日礼包
    关于谁阶段应该分享及啦种程度的活,需要展开资金测算后,进行确定。具体数值其他组曾分析的慌详细了。

优化趋势:

  1. 活动丰富:借鉴淘宝之急促退款。京东竟是可以完成急速退款货,购物体验好再压阿里系一筹。
  2. 正好多荣誉感:除了专属的寿辰礼包外,情感化比较少。建议在京东618预热阶段送小礼什么的。
  3. 增进会员的感知度:目前京东非钻会员权益于鸡肋。组内就有人吐槽,京东就生零星栽会员,钻石和非钻石。京东钻石会员的诀窍是30000人民币之根基消费,每年1000说到底花费,门槛太胜。看是否生其它权益(需要展开资金计算)

会员plus

会员plus:用户直接付费证明自己是赛值用户,要求享受强价值用户之活动。

优势:用户如购买会员,用户更加卖越经济,京东之交易额也再也胜似。

PS:京东中用户评价体系

相传京东其中还打盖了一波评体系,主要用来促销活动之用户选择与售后服务及。不知道诸位小伙伴来没有发生高达京东之地下名单。

本条首稿子主要实现两只职能:

积分系统–进出平衡

目的:通过利益奖励,引导用户作为,构建产品生态。

指望为带的行为

  1. 保日活
  2. 授消费金额
  3. 协完善商品数量
  4. 造就用户移动端采用习惯
  5. 呢其他业务线引流等

积分的获

  1. 登录 = 日活
  2. 购奖励 = 消费金额
  3. 讲评与晒单 = 完善商品数量
  4. 动端签到 =
    培养移动端应用习惯(当时京东还有更残酷之法:移动端商品还有利于)
  5. 兑换钢镚、兑换读书券 = 为其他业务线引流

积分消耗

困难:积分兑换的货色价值高,运营成本高;赠送兑换的货物价值不及,难以吸引用户。所以积分的兑换核心是以小博大,小积分大用处才能够吸引用户。

  1. 换钱优惠卷 –> 侧面曝光了货,所以折扣可更小,更经济
  2. 大乐斗 –> 典型的坐小博大
  3. 京豆+现金 –> 直接换高价值的货物
  4. 换算现金 –> 提交订单时100=1初次抵充现金。
  5. 其它:例如兑换钢镚,为金融引流;10京豆=50首位安卓读书券,为京东书籍引流。
  6. 机动失效

题目考虑

成长值为什么而定期减,而且因会员等减不同的额度

  1. 用户是产生生命周期的,是一个动态的。通过减弱去化长值,让会员系统流动起来。沉默用户权益下降,让位于新入的过人值用户。
  2. 为什么不同阶段需要减小不同额度:保持一个金字塔结构,越顶层用户要进一步少。
  3. 产生没有发出任何方式保障金字塔结构:支付宝会员简单粗暴的之所以topN的主意划定权益。
  4. 有了权益会更加不思去,促使用户不断活跃。

何以京豆使用是1000底翻番?

  1. 京东之退款是遵照百分比较退还的,如果允许个各数京东,退货时会见来大量小数

京豆会什么使失效?

  1. 顿时回收京豆,防止京豆累积太多,京东交易额4000亿+,按1‰换算就是40亿,这是计提的工本,累积个几十年,财务审计是资本不克掩盖这有的财力就会来问题,国外有航空企业就是吃了这个亏,最后黄。
  2. 反面促进用户积极消费京豆,减少京豆的积淀
  3. 撤消部分的营业成本

会员和积分系统以电商产品中真正很要紧吗?

  1. 当前用户的购物行为,以前是圈价格,谁好买哪个的。现在或许在了配送速度等因素。但是多数消费者见面因为升级会员/积分选择企业为?整个电商的会员/积分系统,用户之感知度都比较没有,很麻烦成为用户购买决策的重中之重元素。
  2. 会员系统是用户分层的玩法,对于B2C端主要汇集在活及。B2B可能会见提到返点和价格梯度,直接以会员系统及异常好,不然手动筛选高价值商户人力财力比较高。
  3. 积分系统要用于用户维系的营业。优惠力度不酷,用户与度会大打折扣,需要量力而为

1、点击屏幕下方签到悬浮按钮;

积分及会员系统之前程提高

  1. 长积分的玩法:刮刮乐等,积分兑换其他平台活动
  2. 连为另外产品线引流:京东经济、京东读书、京东至小等等。
  3. 个性化推荐:根据不同用户喜好好,倾向性的引进不同权益,提高会员系统之存在感。

2、弹出幸运大转盘,转盘抽奖签到

京东以防刷做的努力

咱们永恒向往美好,但世界上到底起坏人。

  1. 装有的优惠券必须铜牌以上会员才能够取,防止优惠券被恶意占
  2. 会员plus,必须要求小白评分超自然数值,防止恶意用户。
  3. 退货后,已经沾之成长值和积分进行扣除
  4. 曝单获取京东,越为人家认可获得京东更加多,利用群众监督
  5. 单个货获得的京豆存在上限
  6. 提请退款时,若京豆不足扣除,直接减半退款
  7. 京豆支付不得跨每笔订单结算金额的50%
  8. 用户只能评价该用户名下购买了之货,且该商品优惠后金额超过或等于20老大。因为货物评价取得之京豆为20独。
  9. 意识一个坑填一个坑,等等

 

搭建积分系统的小建议

  1. 积分系统是一个日益确立之过程,非常适合初期推出MVP的版本,后续根据运营需求不断完善。
  2. 选品问题:中小型企业预算少,可以品尝还多发生特点之粗礼物,例如pmcaff的定制鼠标垫,或者跟其余货品/商家合作,例如优酷金币和京东的做法。
  3. 预算问题:初期预算不足时,可以与任何店铺合作,曝光其他局之货,要求还不比的价。双方互利。

效益使图:

葡京签到送彩金 1

葡京签到送彩金 2

 

当网上检索了成千上万运动端拖拽的js实现方式,大部分且是随即等同种植,html5的touch事件,但是没有找到点击按钮可以于星星度贴边的拖拽,所以集中网上查阅到的相干材料自己小修改了一点。代码如下:

 

 1 $(function(){
 2 
 3 //签到按钮拖拽
 4 //首先,设置cookie值,使到不同的页面刷新拖拽的按钮位置不会变
 5 function setCookie(name,value,expires){
 6         var oDate=new Date();
 7         oDate.setDate(oDate.getDate()+expires);
 8         document.cookie=name+'='+value+';expires='+oDate;
 9     }
10     function getCookie(name){
11         var arr=new Array();
12         arr=document.cookie.split("; ");
13         var i=0;
14         for(i=0; i<arr.length;i++){
15             arr2=arr[i].split("=");
16             if(arr2[0]==name)
17             {
18                 return arr2[1];
19             }
20         }
21         return '';
22     }
23     function removeCookie(name){
24         setCookie(name,'随便什么值,反正都要被删除了',-1);
25     }
26     //判断a和b的原因是第一次打开,cookie中并没有相应的参数,所以当有参数时执行,
27     // a和b只需要判断一个就好了
28     var oDiv=document.getElementById('signCorner');
29 
30     var a=getCookie('xPosition');
31     var b=getCookie('yPosition');
32     if(a){
33         oDiv.style.left=a+'px';
34         oDiv.style.top=b+'px';
35     }
36     
37 var dragBox = document.getElementById('signCorner');
38 
39 //拖拽中
40 dragBox.addEventListener('touchmove', function(event) {
41     event.preventDefault();//阻止其他事件
42     // 如果这个元素的位置内只有一个手指的话
43     if (event.targetTouches.length == 1) {
44         var touch = event.targetTouches[0];
45         // 元素与手指位置同步
46         dragBox.style.left = touch.clientX + 'px';
47         dragBox.style.top = touch.clientY + 'px';
48         //由于页面中会有滚动,所以在这不能用pageX和pageY,要用clientX  clientY
49 
50     }
51 }, false);
52 
53 //拖拽结束,放手
54 dragBox.addEventListener('touchend',function(event) {
55     // 如果这个元素的位置内只有一个手指的话
56     //拖拽结束,changedTouches列表是涉及当前事件的列表
57     if (event.changedTouches.length == 1) {
58         var touch = event.changedTouches[0];
59         // 判断手指位置,放置元素,如果大于浏览器宽度的一半,则右贴边,小于等于则左贴边
60         var halfViewWidth=window.innerWidth/2;
61         var halfWidth=$(dragBox).width()/2;
62         // 手指位置判断,竖直方向,超出屏幕的贴边,水平方向,超出屏幕贴边,
63         //左边左贴边,右边右贴边
64         if((touch.clientX<0)||(touch.clientX>=0&&touch.clientX<=(halfViewWidth-halfWidth))){
65             dragBox.style.left = 20 + 'px';
66         }else if(touch.clientX>=(halfViewWidth-halfWidth)){
67             dragBox.style.left = (window.innerWidth-20-$(dragBox).width()) + 'px';
68         }
69         if(touch.clientY<0){
70             dragBox.style.top = 20 + 'px';
71         }else if(touch.clientY>=window.innerHeight-$(dragBox).height()){
72             dragBox.style.top = (window.innerHeight-$(dragBox).height()-20) + 'px';
73         }
74     }
75     dragBox.touchmove=null;
76     dragBox.touchend=null;
77     setCookie('xPosition',oDiv.offsetLeft,1);
78     setCookie('yPosition',oDiv.offsetTop,1);
79 },false);

 

 

签证到转盘代码如下:

  1 //如果未签到 或者 未登录 显示签到
  2 if(IS_SIGN == 1 || UID == '' || UID == 0){
  3     $("#signCorner").show();
  4 }
  5 
  6 //点击签到图标
  7     $("#signCorner").click(function () {
  8         if(UID == undefined || UID == 0 || UID == ""){
  9             //未登录跳转登录页
 10             window.location.href='/index.php?app=wap&mod=Public&act=login';
 11             return false;
 12         }else{
 13             $("#signCorner").hide();
 14             $("#signInDrawStart").show();
 15             $("#mask").show();
 16         }
 17     });
 18     //点击X关闭
 19     $(".signInDraw-close").click(function () {
 20         $(this).parent(".signInDraw-turntablebg").hide();
 21         $("#mask").hide();
 22         location.reload();
 23     });
 24     //点击遮罩关闭
 25     /*$("#mask").click(function(){
 26         $(".signInDraw-turntablebg").hide();
 27         $("#mask").hide();
 28         location.reload();
 29     });*/
 30     //大弹窗转盘
 31     $(function (){
 32         var rotateTimeOut = function (){
 33             $('#rotate').rotate({
 34                 angle:0,
 35                 animateTo:2160,
 36                 duration:8000,
 37                 callback:function (){
 38                     alert('网络超时,请检查您的网络设置!');
 39                 }
 40             });
 41         };
 42         var bRotate = false;
 43         var rotateFn = function (awards, angles, txt){
 44             bRotate = !bRotate;
 45             $('#rotate').stopRotate();
 46             $('#rotate').rotate({
 47                 angle:0,
 48                 animateTo:angles+1800,
 49                 duration:8000,
 50                 callback:function (){
 51                     $.post(U('activity/Activity/queUserSign'),{uid:awards.uid},function(result){
 52                         var results = eval('('+result+')');
 53                         var attrs   = '';
 54                         var succession_sign = results.data.succession_sign;
 55                         if(succession_sign == 0){
 56                             succession_sign = 7;
 57                         }else{
 58                             var endsuc = 7 - succession_sign;
 59                         }
 60                         if (results.status == 1)
 61                         {
 62                             if(awards.name == "积分"){
 63                                 $(".signInDraw-Congratulate").html(txt);
 64                                 $('#kaquan').hide();
 65                                 $('#hongbao').hide();
 66                             }else if(awards.name == "现金红包"){
 67                                 $(".signInDraw-Congratulate").html(txt);
 68                                 $('#jifen').hide();
 69                                 $('#kaquan').hide();
 70                             }else{
 71                                 $(".signInDraw-Congratulate").html(txt);
 72                                 $('#jifen').hide();
 73                                 $('#hongbao').hide();
 74                             }
 75                             if(succession_sign == 7){
 76                                 $('#signInDraw-tips1').show();
 77                                 $('#signInDraw-tips').hide();
 78                             }else{
 79                                 $('#signInDraw-tips1').hide();
 80                                 $("#sSuc").html(succession_sign);
 81                                 $("#endSuc").html(endsuc);
 82                             }
 83                             $('#signInDrawLast').show();
 84                         }else {
 85                             $(".signInDrawLast").hide();
 86                         }
 87                     });
 88                     bRotate = !bRotate;
 89                 }
 90             })
 91         };
 92 
 93         $('#signInDraw-pointer').click(function (){
 94             if(bRotate)return;
 95             if(UID == undefined || UID == 0 || UID == ""){
 96                 //未登录跳转登录页
 97                 // var url = "<?php echo base64_encode(U('public/Finance/index'));?>";
 98                 setTimeout(function () {window.location.href='/index.php?app=wap&mod=Public&act=login';}, "0");
 99                 return false;
100             }
101             var attrs = '';
102             $.post(U('activity/Activity/signInActivity'),{uid:UID},function(result){
103                 var results = eval('('+result+')');
104                 if (results.status == 1)
105                 {
106                     //奖品id,需指定
107 
108                     switch (results.data.id) {
109                         //普通奖励
110                         case 0:
111                             rotateFn(results.data, 67, results.info.title);
112                             break;
113                         case 109:
114                             rotateFn(results.data, 220, results.info.title);
115                             break;
116                         case 110:
117                             rotateFn(results.data, 220, results.info.title);
118                             break;
119                         case 43:
120                             rotateFn(results.data, 139, results.info.title);
121                             break;
122                         case 26:
123                             rotateFn(results.data, 139, results.info.title);
124                             break;
125 
126                         //宝箱奖励
127                         //积分
128                         case 1:
129                             rotateFn(results.data, 280, results.info.title);
130                             break;
131                         case 114:
132                             rotateFn(results.data, 280, results.info.title);
133                             break;
134                         case 89:
135                             rotateFn(results.data, 280, results.info.title);
136                             break;
137                         case 115:
138                             rotateFn(results.data, 280, results.info.title);
139                             break;
140                         case 6:
141                             rotateFn(results.data, 280, results.info.title);
142                             break;
143                         case 66:
144                             rotateFn(results.data, 280, results.info.title);
145                             break;
146                         case 109:
147                             rotateFn(results.data, 280, results.info.title);
148                             break;
149                         case 109:
150                             rotateFn(results.data, 280, results.info.title);
151                             break;
152                         case 109:
153                             rotateFn(results.data, 280, results.info.title);
154                             break;
155                     }
156                 }else {
157                     $("#headerSignPopUp").show();
158                     location.reload();
159                 }
160             });
161         });
162     });
163 });

})

 

要提要:

常见js宽度获取:

 1 网页可见区域宽:document.body.clientWidth
 2 网页可见区域高:document.body.clientHeight
 3 网页可见区域宽:document.body.offsetWidth (包括边线和滚动条的宽)
 4 网页可见区域高:document.body.offsetHeight(包括边线的宽)
 5 网页正文全文宽:document.body.scrollWidth
 6 网页正文全文高:document.body.scrollHeight
 7 网页被卷去的高(ff):document.body.scrollTop
 8 网页被卷去的高(ie):document.documentElement.scrollTop
 9 网页被卷去的左:document.body.scrollLeft
10 网页正文部分上:window.screenTop
11 网页正文部分左:window.screenLeft
12 屏幕分辨率的高:window.screen.height
13 屏幕分辨率的宽:window.screen.width
14 屏幕可用工作区高度:window.screen.availHeight
15 屏幕可用工作区宽度:window.screen.availWidth
16 你的屏幕设置是:window.screen.colorDepth  位彩色
17 你的屏幕设置:window.screen.deviceXDPI  像素/英寸
18 
19 window的页面可视部分实际高度(ff):window.innerHeight //常用
20 window的页面可视部分实际高度(ff):window.innerWidth  //常用
21 
22 某个元素的宽度:obj.offsetWidth  //常用
23 某个元素的高度:obj.offsetHeight //常用
24 
25 某个元素的上边界到body最顶部的距离:obj.offsetTop(在元素的包含元素不含滚动条的情况下)
26 某个元素的左边界到body最左边的距离:obj.offsetLeft(在元素的包含元素不含滚动条的情况下)
27 返回当前元素的上边界到它的包含元素的上边界的偏移量:obj.offsetTop(在元素的包含元素含滚动条的情况下)
28 返回当前元素的左边界到它的包含元素的左边界的偏移量:obj.offsetLeft(在元素的包含元素含滚动条的情况下)

 

js获取Html元素的莫过于增长率高度:

1、#div1.style.width

2、#div1.offsetWidth

 
 宽高且勾于体制表里,就按#div1{width:120px;}。这遭到状态经#div1.style.width以不顶步长,而由此#div1.offsetWidth才得博得到步长;宽和赛是描摹以行内中,比如style=”width:120px;”,这遭到状态通过上述2独主意都能将到步长。

 
 小结,因为id.offsetWidth和id.offsetHeight无视样式写在样式表还是行内,所以我们赢得元素宽和赛的时候太好用这2只属性。注意要无是描摹在行内style中之习性都未克由此id.style.atrr来获取。

 

touch事件

touch事件模型时规定了好多种类型的触摸事件,以下三栽是采取最普遍的:

 

1. Touchstart:手指刚放到屏幕及有DOM元素里的时候该因素触发

2. Touchmove:指紧贴屏幕的时节总是触发

3. Touchend:手指从屏幕及抬起底早晚接触

 

每当PC触发啊以下三个事件:

1.mouseup**

2.mousemove(一次)**

3.mousedown**

 

这些个事件都见面顺DOM树向上冒泡,并发出一个触摸事件对象。

Touches:代表手上居屏幕上的具备手指动作之列表,是一个TouchList类型的目标,TouchList是一个类数组对象,它里面装的凡Touch对象。表示目前跟踪的触摸操作的touch对象的数组。

targetTouches:特定于波目标的Touch对象的数组。

changeTouches:代表于上次触摸以来发生了呀改观之Touch对象的数组。

 

每个Touch对象涵盖的习性如下。

 

clientX:触摸目标在视口中的x坐标。

clientY:触摸目标在视口中的y坐标。

identifier:标识触摸的唯一ID。

pageX:触摸目标在页面中之x坐标。(触摸点相对于页面的职位)

pageY:触摸目标以页面中之y葡京签到送彩金坐标。

screenX:触摸目标在屏幕中之x坐标。

screenY:触摸目标在屏幕被的y坐标。

target:触目的DOM节点目标。

 

1 $(document).bind(touchEvents.touchstart, function (event) {
2       event.preventDefault();          
3 });
4 $(document).bind(touchEvents.touchmove, function (event) {
5       event.preventDefault();           
6 });
7 $(document).bind(touchEvents.touchend, function (event) {
8         event.preventDefault();
9 });

touches是于屏幕及之富有手指列表,targetTouches是时DOM上之手指头列表,所以当手指移开触发touchend事件频仍,event.originalEvent是未曾这个targetTouches列表的,而changedTouches列表是关联当前事件之列表,例如touchend事件中,手指移开。touchend事件备受应有是光发生只changedTouches触摸实例列表的。

 

参照链接:原生js完美拖拽,每次刷新可以记住上次拖拽的职务