小程序模板網(wǎng)

微信小程序開發(fā)問答《六十六》 菜單內(nèi)容左右聯(lián)動(dòng) & MD5加密 ...

發(fā)布時(shí)間:2018-04-23 12:17 所屬欄目:小程序開發(fā)教程
1、微信小程序菜單內(nèi)容左右聯(lián)動(dòng)
 

小程序無法獲取元素的寬高,位置信息,只能通過后臺(tái)計(jì)算,但是存在較大的機(jī)器誤差,不知有啥好的解決方案?git地址:https://github.com/Panfen/lumm

如圖所以,左側(cè)是菜單欄,右側(cè)是主體內(nèi)容,點(diǎn)擊左側(cè)菜單,右側(cè)滑動(dòng)到相應(yīng)的位置;右側(cè)滑動(dòng)過程,也會(huì)改變左側(cè)菜單的選中狀態(tài)。本人的實(shí)現(xiàn)方案:

  • 所有元素大小單位用rpx;

  • 通過scrollbind(e) 的 e.detail.scrollHeight獲取右側(cè)滑動(dòng)區(qū)域的總高度(單位px)

  • 通過物品高度和標(biāo)題高度的比值,計(jì)算出各自的實(shí)際高度(單位px)

  • 通過修改scrollTop(單位px)改變主體內(nèi)容位置

這樣還是存在1px-100px的誤差,物品越多,后面的累計(jì)誤差會(huì)越大,有沒有更好的解決辦法呢?

 

答:測(cè)試了一下,的確用scroll-view的scroll-to-view特性可以解決:

 

wxml中修改:


<scroll-view scroll-y style="height: 31.5em" class="goods" bindscroll="goodsScrollAct"  scroll-into-view="{{toView}}" >
  <view class="box" id="{{item.viewId}}"  wx:for="{{allGoods}}" wx:key="unique" wx:for-index="typeId">

js文件中修改:
page data中增加:


menuType:['food','dust','bowl','cages','toys','tools'],
toView:'cages',

然后把下面函數(shù)修改一下:
selectMenuAct: function (e) {


//typename
var id = e.target.dataset.id;
var tType=this.data.menuType[id];
console.log(e),
this.setData({
  scrollNum: id,
  toView: tType
  //scrollTop: this.data.heightList[id]
});

},
測(cè)試環(huán)境下通過。

 

scroll-into-view值應(yīng)為某子元素id(id不能以數(shù)字開頭)。設(shè)置哪個(gè)方向可滾動(dòng),則在哪個(gè)方向滾動(dòng)到該元素。

 

2、微信小程序MD5加密

一般很多語言都有MD5加密的庫(kù)。

如果你指的是數(shù)據(jù)加密,怕數(shù)據(jù)明文不安全,我建議使用base64 + 一些前綴或者后綴進(jìn)行加密,然后將數(shù)據(jù)傳到服務(wù)器,服務(wù)器再進(jìn)行解密后去掉這些前后綴。比如,明文是abc,你可以加一下前綴,變成123abc,然后加密成為MTIzYWJj再發(fā)出去,然后再解密就行了。

一般MD5加密是不可逆的。而base64可以編碼解碼,如下:


package main

import (
    "fmt"
    "github.com/hunterhug/GoSpider/util"
)

func main() {
    s := "abc"
    prefix := "123"
    base64e := util.Base64E(prefix + s)
    fmt.Println("加密:" + base64e)
    fmt.Println("再解密:" + util.Base64D(base64e))
}

結(jié)果


加密:MTIzYWJj
再解密:123abc

百度百科介紹:Base64編碼可用于在HTTP環(huán)境下傳遞較長(zhǎng)的標(biāo)識(shí)信息。例如,在Java Persistence系統(tǒng)Hibernate中,就采用了Base64來將一個(gè)較長(zhǎng)的唯一標(biāo)識(shí)符(一般為128-bit的UUID)編碼為一個(gè)字符串,用作HTTP表單和HTTP GET URL中的參數(shù)。在其他應(yīng)用程序中,也常常需要把二進(jìn)制數(shù)據(jù)編碼為適合放在URL(包括隱藏表單域)中的形式。此時(shí),采用Base64編碼不僅比較簡(jiǎn)短,同時(shí)也具有不可讀性,即所編碼的數(shù)據(jù)不會(huì)被人用肉眼所直接看到。

我的Golang語言自己封裝的加密庫(kù)一般是這樣的:


/*
Copyright 2017 by GoSpider author.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package util

import (
    "crypto/hmac"
    "crypto/md5"
    "crypto/sha256"
    "encoding/base64"
    "encoding/hex"
    "fmt"
    "net/url"
    "strings"
)

// HMAC with the SHA256  http://blog.csdn.net/js_sky/article/details/49024959
func ComputeHmac256(message string, secret string) string {
    key := []byte(secret)
    h := hmac.New(sha256.New, key)
    h.Write([]byte(message))
    return base64.StdEncoding.EncodeToString(h.Sum(nil))
}

// create md5 string
func Strtomd5(s string) string {
    h := md5.New()
    h.Write([]byte(s))
    rs := hex.EncodeToString(h.Sum(nil))
    return rs
}

func Md5(str string) string {
    return Strtomd5(str)
}

// 字符串base64加密
func Base64E(urlstring string) string {
    str := []byte(urlstring)
    data := base64.StdEncoding.EncodeToString(str)
    return data
}

// 字符串base64解密
func Base64D(urlxxstring string) string {
    data, err := base64.StdEncoding.DecodeString(urlxxstring)
    if err != nil {
        return ""
    }
    s := fmt.Sprintf("%q", data)
    s = strings.Replace(s, "\"", "", -1)
    return s
}

//url轉(zhuǎn)義
func UrlE(s string) string {
    return url.QueryEscape(s)
}

//url解義
func UrlD(s string) string {
    s, e := url.QueryUnescape(s)
    if e != nil {
        return e.Error()
    } else {
        return s
    }
}

現(xiàn)在大部分站點(diǎn)都開啟https來保證數(shù)據(jù)安全。



易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉(cāng)庫(kù):starfork
本文地址:http://22321a.com/wxmini/doc/course/23941.html 復(fù)制鏈接 如需定制請(qǐng)聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢