小程序填坑实录

open-data头像如何设置样式

  • 设置成 { display: block; overflow: hidden; } 就能够正常设置样式了,包括圆形头像等

用户受权按钮设计思路

  • 受权按钮设计成全屏透明的,用户点击屏幕任意位置便可发起受权

小程序中使用Promise

  • 引用npm中的es6-promise便可;
  • 使用下面的函数包裹微信API便可将其转为Promise方式调用:
function promise(fn) {
    return function (obj = {}) {
        return new Promise((resolve, reject) => {
            obj.success = res => resolve(res);
            obj.fail = res => reject(res);
            fn(obj);
        })
    }
}
...
调用方式:
utils.promise(wx.request)({ url: ... }).then(response => { ... }) ...

利用::after伪元素添加半透明背景

.elem { /* 元素自己添加样式 */ 
    position: relative; /* 为了后面的伪元素以本元素为定位基准 */
    z-index: 10;    /* 渲染在伪元素之上 */
    /* 其它样式,大小,字体等 */
}
.elem::after { /* 给元素添加::after伪元素并设置为半透明:*/ 
    content: ""; 
    position: absolute; 
    left: 0; 
    background-color: white; 
    opacity: 0.2;
    /* 其它样式,大小应和主元素一致 */
}

开发阶段给全部元素添加虚线边框

  • 小程序WXSS彷佛不支持"*"选择器,所以只能用如下笨办法:
/* 仅供测试,发布版请删除 */
view,icon,text,rich-text,progress,image,button,textarea,open-data,navigator,canvas,checkbox,form,input,label,picker,radio,slider,switch {
    outline: 1px dashed lightblue;
}

渐变背景支持

  • 为了在开发工具生效,须要使用"-webkit-"前缀:
.mainbg {
    background: -webkit-linear-gradient(left,#18b6ff,#aa29ff);
    background: linear-gradient(left,#18b6ff,#aa29ff);
}

占据垂直方向的剩余空间

  • 使用CSS的calc函数,结合vw, vh等单位,能够动态设定CSS长度
{ height: calc(100vh - 300rpx); }

让小程序支持服务端Session

  • 主要就是要添加Cookie支持,能够包装一下wx.request方法实现
    1) 解析response的Set-Cookie应答头,并将cookie保存在本地
    2) 之后每次请求把本地保存的cookie放到Cookie请求头中

开发工具OK,但手机实测WebSocket会话丢失

  • 使用上面的方法包装了wx.request,能够正常使用基于Cookie的服务器Session,在开发工具上,链接WebSocket也能够在握手时正常获取Session中的属性,但手机实测时发现Session丢失
  • 经研究,估计由于开发者工具是基于Chrome浏览器的,所以WebSocket请求也自动带上了浏览器缓存的Cookie,但手机上实现机制不一样,所以没有带Cookie请求头
  • 包装一下wx.connectSocket,添加Cookie请求头便可

点击用户头像跳转页面

  • open-data上面不能绑定事件,简单实现能够用navigator包裹open-data,不用写js代码便可实现点击跳转页面;
  • navigator至关于html的a元素,默认为inline,可修改display样式为block

重载按钮的样式

  • 由于分享、客服之类的功能只能经过按钮唤起,不能使用view或navigator,所以为了界面统一,须要重载按钮的样式
  • 个人程序的风格是半透明背景按钮,使用::after伪元素实现,这里发现一个奇葩的坑:彷佛按钮的默认样式把它的::after伪元素缩小到了原大小的一半,所以须要增长一行transform把它恢复原大小:
.btn::after {
    ...
    transform: scaleX(1) scaleY(1);
}

关于转发

  • 须要在Page中添加onShareAppMessage方法,不然点右上角菜单不会出现转发选项
  • 除了右上角菜单外,可使用open-type="share"的按钮
  • 能够经过onShareAppMessage的参数中的from字段区分事件来源是菜单仍是按钮
  • 经过onShareAppMessage方法返回的对象来定制转发界面显示的内容
  • 另外,在返回的对象上可添加success/fail回调方法来判断转发是否成功以便在程序中发放奖励。注意,这里有一个坑,在开发者工具(v1.02.1805181)上回调是不会被调用的,只有在手机上才有效。

阿里云RDS支持emoji表情符号

  • 不少微信用户的名字里面包含emoji字符,必须解决此问题
  • 建立数据库时须要指定字符集为utf8mb4
  • 确保MySQL数据库版本5.7以上
  • 确保mysql-connector-java版本5.1.13以上
  • 阿里云RDS后台->实例详情->参数设置,修改character_set_server的值为utf8mb4

SVG矢量图支持验证

  • 经测试,三端均支持SVG背景图,支持"data:image/svg+xml,..."内嵌svg图片
  • image对象,能够src直接引用本地或网络svg图片,但不支持"data:image/svg+xml,..."直接内嵌svg图片

CSS3 clip-path支持验证

  • 经测试,三端当前版本微信均支持clip-path

iOS CSS3动画BUG

  • 经验证,iOS上,使用CSS3 animation实现动画,循环播放的没有问题,但固定次数播放的则有问题
  • 所以,单次播放的动画应考虑用transition实现
相关文章
相关标签/搜索