微信小程序实战篇-商品详情页(二)

今天要讲解商品详情页中sku的弹出选着框,这个涉及css动画样式,css动画是新的知识点,我们之前并没有接触过,请大家做好笔记,我们要做的效果是酱紫的~


sku选着.png

这个布局难点是需要绘制一个阴影背景、弹出的动画、购买数量加减的逻辑以及图片如何高于弹出框

代码的实现

  1. detail.wxml
<import src="/template/quantity/index.wxml" />
  <!-- sku选择 -->
  <text bindtap="toggleDialog">请选择购买数量</text>
  <view class="dialog {{ showDialog ? 'dialog--show' : '' }}">
    <view class="dialog__mask" bindtap="toggleDialog" />
    <view class="dialog__container">
      <view class="row">
         <image bindtap="closeDialog" class="image-close" src="../../images/detail/close.png"></image>
        <image class="image-sku" src="http://mz.djmall.xmisp.cn/files/product/20161201/148057921620_middle.jpg"></image>
        <view class="column">
          <text class="sku-price">¥500</text>
          <text class="sku-title">库存20件</text>
           <text class="sku-title">商品编码:1456778788</text>
        </view>
      </view>
      <text class="border-line"></text>
      <view class="row">
        <text >购买数量</text>
        <view class="quantity-position">
          <template is="quantity" data="{{ ...quantity1, componentId: 'quantity1' }}" />
        </view>
      </view>
      <text class="border-line"></text>

      <button class="button-green" bindtap="addCar" formType="submit">加入购物车</button>
      <button class="button-red" formType="submit">立即购买</button>
    </view>
  </view>

这里面要重点讲解的是<template>,微信小程序提供模板template,可以在模板中定义代码片段,然后在不同地方调用,这里面就引用了名为quantity的代码块,这样引用的好处和css样式引用一样,增加代码发复用率,引用方式如下,is后面是模板的名字,data放入模板中要用到的数据

//自定义的模板
<template name="msgItem">
 <view>
   <text> {{index}}: {{msg}} </text>
   <text> Time: {{time}} </text>
 </view>
</template>
//引用模板
<template is="msgItem" data="{{...item}}"/>
//数据
Page({
  data: {
    item: {
      index: 0,
      msg: 'this is a template',
      time: '2016-09-15'
    }
  }
})
  1. detail.wxss
/* sku选择 */
.dialog__mask {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 10;
  background: rgba(0, 0, 0, 0.7);
  display: none;
}
.dialog__container {
  position: fixed;
  bottom: 0;
  width: 750rpx;
  background: white;
  transform: translateY(150%);
  transition: all 0.4s ease;
  z-index: 11;
}
.dialog--show .dialog__container {
  transform: translateY(0);
}
.dialog--show .dialog__mask {
  display: block;
}
.image-sku {
  width: 200rpx;
  height: 200rpx;
  z-index: 12;
  position: absolute;
  left: 20px;
  top: -30px;
  border-radius: 20rpx;
}
.image-close {
  width: 40rpx;
  height: 40rpx;
  position: fixed;
  right: 10rpx;
  top: 10rpx;
}
.column {
  display: flex;
  flex-direction: column;
}
.row {
  display: flex;
  flex-direction: row;
  align-items: center;
}
.border-line {
  width: 100%;
  height: 2rpx;
  display: inline-block;
  margin: 30rpx 0rpx;
  background-color: gainsboro;
  text-align: center;
}
.sku-title {
  position: relative;
  left: 300rpx;
  margin: 1rpx;
}
.sku-price {
  color: red;
  position: relative;
  left: 300rpx;
  margin: 1rpx;
}
.row .quantity-position {
  position: absolute;
  right: 30rpx;
}

今天重点讲解wxss样式

  1. position 位置属性

    • absolute 生成绝对定位的元素,相对于父元素进行定位元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
    • fixed 生成绝对定位的元素,相对于浏览器窗口进行定位。
      元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。
    • relative 生成相对定位的元素,相对于其正常位置进行定位。

    阴影部分要铺满屏幕所以用到了fixed属性,把上下左右的距离都设置为0,就可以使整个阴影铺满浏览器的窗口了

  2. transform 转换

    • transform : scale(x,y); 缩放
    • transform : rotate(deg); 旋转 deg(度)
    • transform : skew( x ,y); 倾斜
    • transform : scale(x,y); 缩放
    • transform : translateY(y); 位置移动
sku选着栏从底部出来就是用到translateY属性,代码中设置150%->0,就是从本身的1.5倍距离移动到本身的位置
  1. ** transition** 过度转变transition : property duration timing-function delay;
    • property : 制定css属性的名字,all代表所有属性都获得过度效果
    • duration : 过度时间,必须有值,否则动画无效果
    • timing-function : 允许一个过渡效果,以改变其持续时间的速度 ease规定慢速开始,然后变快,然后慢速结束的过渡效果
    • delay :推迟动画的时间
transition: all 0.4s ease;意思是全部属性执行动画在0.4s之内,开始慢速然后变快,最后慢速结束
  1. detail.js
var Temp = require('../../template/contract.js');
Page(Object.assign({}, Temp.Quantity,{
  data: {
    quantity1: {
      quantity: 10,
      min: 1,
      max: 20
    },
},
  //数量变化处理
  handleQuantityChange(e) {
    var componentId = e.componentId;
    var quantity = e.quantity;
  this.setData({
      {componentId}.quantity: quantity
    });
  }

这里我们要掌握以下几点

  1. require()是引用别的地方的js代码,这里就是引用contract.js里的js代码
  2. Object.assign,这个是js的属性,定义是:从一个对象复制所有的属性到另一个对象是一个常见的操作,这里就是把Temp.Quantity的数据和detail.js的数据合并到一起
  3. handleQuantityChange 加减按钮触发的事件监听,每点击加减按钮,都会回调此方法

总结

今天的知识点难度有点大,大家可能需要点时间去消化,尤其是为了复用代码,js、wxml、wxss都有对应的引入语法,大家一定要区分开,好了,今天就到这,祝大家周末愉快~

上一篇:微信小程序实战篇-商品详情页(一)

下一篇:微信小程序实战篇-购物车

建了一个小程序技术交流群,想入群的读者请加微信
小程序入群.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 哈喽,大家好,今天要进入新篇章啦,商品详情页,这个可是个大模块,要分好几次才能讲解清楚,现在我们先进行第一讲,老规...
    代码君_Coder阅读 28,124评论 2 35
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,629评论 1 92
  • 米冉从睡梦中惊醒。 房子点着昏暗的罩灯,黯淡的金黄色从墙壁里透散开来,她躺在一张大床上,半掩着天鹅绒毯,轻微的喘着...
    犹豫的More阅读 446评论 0 1
  • 很多时候,听到朋友们谈职业生涯规划,职场再学习、职场情商等等,其实殊不知,很多时候职场差距的产生只是因为“认真”二...
    熊猫大叔阅读 266评论 0 0
  • “既然选择了远方,便只顾风雨兼程。”这霸气又细腻的诗句,形容我此时此刻的心情再适合不过了。 亚历山大大帝去到地...
    梅井阅读 574评论 0 1