返回顶部

微信小程序中 一些封装的函数

变速改变任意对象的任意属性大小的动画函数:

 1   //变速改变任意对象的任意属性大小的函数
 2   animation_variableSpeed: function (ele, ele_tar, func_callback) {  //ele 对象  attr 属性名字 targetPos 目标位置 func_callbk回调函数
 3     var that = this;
 4     var len = Object.getOwnPropertyNames(ele_tar).length;  //它是获取ele_tar对象中 有多少个字段。
 5     //清理定时器
 6     clearInterval(ele.timeId);
 7     ele.timeId = setInterval(function () {
 8       for (var key in ele_tar) {
 9         var attr = key;
10         var targetPos = ele_tar[key];
11 
12         if (attr == "opacity") { //透明度属性
13           //此时的 透明度的精度设计是 0.01   
14           var curPos = parseInt( ele.opacity * 100); //透明度放大100倍方便计算(此时类型是数字类型)
15           var targetPos = parseInt(ele_tar[attr] * 100);  //目标透明度也放大100倍
16 
17           var step = (targetPos - curPos) / 10;
18           step = step > 0 ? Math.ceil(step) : Math.floor(step);
19           curPos += step;
20 
21           ele[attr] = curPos / 100;  //最后赋值的时候也要缩小100倍
22           console.log("cur: " + curPos + " tar:" + targetPos + " step:" + step + " ");
23           
24         } else if (attr == "zIndex") { //层次的属性
25           ele[attr] = ele_tar[attr];
26 
27         } else {  //普通的属性
28           //获取当前的位置
29           var curPos = parseInt(ele[attr]);
30           //每次移动的步数
31           var step = (targetPos - curPos) / 10;
32           step = targetPos > curPos ? Math.ceil(step) : Math.floor(step); //正数向上取整 负数向下取整
33           curPos += step;
34           ele[attr] = curPos;
35           console.log("cur: " + curPos + " tar:" + targetPos + " step:" + step + " ");
36         }
37 
38 
39         var flag = true; // 清理定时器
40         for (var key in ele_tar) {
41           var attr = key;
42           if( ele[attr] != ele_tar[attr] ){
43               flag = false;
44           }  
45         }
46         if(flag){
47           console.log("清理定时器")
48           clearInterval(ele.timeId);
49           //所有的属性都更改完毕之后再调用回调函数!
50           if (func_callback) { //有 callbk 才可以调用
51             func_callback();
52           }
53         }
54       }
55       that.setData({ele:ele});  
56     }, 15);
57   }
变速动画函数

 

简单使用:

效果:

1 <view style="width:{{ele.w}}px;height:{{ele.h}}px;opacity:{{ele.opacity}};z-index:{{ele.zIndex}}"></view>
index.wxml
  1 // pages/zcb/zcb.js
  2 Page({
  3 
  4   /**
  5    * 页面的初始数据
  6    */
  7   data: {
  8 
  9   },
 10 
 11   /**
 12    * 生命周期函数--监听页面加载
 13    */
 14   onLoad: function (options) {
 15     var that = this;
 16     var ele = {
 17       w:300,
 18       h:0,
 19       opacity:1,
 20       zIndex:1,
 21     }
 22     this.setData({ele:ele});  
 23 
 24     // 需要改变的值
 25     var ele_tar = {
 26       w: 300,
 27       h: 300,
 28       opacity: 0.5,
 29       zIndex: 1,
 30     }
 31     var ele_tar2 = {
 32       w:0,
 33       h:300,
 34       opacity:1,
 35       zIndex:1
 36     }
 37     this.animation_variableSpeed(ele,ele_tar,function(){
 38       that.animation_variableSpeed(ele,ele_tar2)
 39     });
 40 
 41   },
 42   //变速改变任意对象的任意属性大小的函数
 43   animation_variableSpeed: function (ele, ele_tar, func_callback) {  //ele 对象  attr 属性名字 targetPos 目标位置 func_callbk回调函数
 44     var that = this;
 45     var len = Object.getOwnPropertyNames(ele_tar).length;  //它是获取ele_tar对象中 有多少个字段。
 46     //清理定时器
 47     clearInterval(ele.timeId);
 48     ele.timeId = setInterval(function () {
 49       for (var key in ele_tar) {
 50         var attr = key;
 51         var targetPos = ele_tar[key];
 52 
 53         if (attr == "opacity") { //透明度属性
 54           //此时的 透明度的精度设计是 0.01   
 55           var curPos = parseInt( ele.opacity * 100); //透明度放大100倍方便计算(此时类型是数字类型)
 56           var targetPos = parseInt(ele_tar[attr] * 100);  //目标透明度也放大100倍
 57 
 58           var step = (targetPos - curPos) / 10;
 59           step = step > 0 ? Math.ceil(step) : Math.floor(step);
 60           curPos += step;
 61 
 62           ele[attr] = curPos / 100;  //最后赋值的时候也要缩小100倍
 63           console.log("cur: " + curPos + " tar:" + targetPos + " step:" + step + " ");
 64           
 65         } else if (attr == "zIndex") { //层次的属性
 66           ele[attr] = ele_tar[attr];
 67 
 68         } else {  //普通的属性
 69           //获取当前的位置
 70           var curPos = parseInt(ele[attr]);
 71           //每次移动的步数
 72           var step = (targetPos - curPos) / 10;
 73           step = targetPos > curPos ? Math.ceil(step) : Math.floor(step); //正数向上取整 负数向下取整
 74           curPos += step;
 75           ele[attr] = curPos;
 76           console.log("cur: " + curPos + " tar:" + targetPos + " step:" + step + " ");
 77         }
 78 
 79 
 80         var flag = true; // 清理定时器
 81         for (var key in ele_tar) {
 82           var attr = key;
 83           if( ele[attr] != ele_tar[attr] ){
 84               flag = false;
 85           }  
 86         }
 87         if(flag){
 88           console.log("清理定时器")
 89           clearInterval(ele.timeId);
 90           //所有的属性都更改完毕之后再调用回调函数!
 91           if (func_callback) { //有 callbk 才可以调用
 92             func_callback();
 93           }
 94         }
 95       }
 96       that.setData({ele:ele});  
 97     }, 15);
 98   }
 99 
100 
101 })
index.js
1 view{
2   background-color: purple;
3 }
index.wxss

 

 

canvas 中的文字渲染函数(实现换行 和 加粗):

 1   /**
 2   * 渲染文字
 3   *
 4   * @param {Object} obj
 5    */
 6   drawText: function (ctx, obj) {
 7     console.log('渲染文字')
 8     ctx.save();
 9     ctx.setFillStyle(obj.color);
10     ctx.setFontSize(obj.size);
11     ctx.setTextAlign(obj.align);
12     ctx.setTextBaseline(obj.baseline);
13     if (obj.bold) {
14       console.log('字体加粗')
15       ctx.fillText(obj.text, obj.x, obj.y - 0.5);
16       ctx.fillText(obj.text, obj.x - 0.5, obj.y);
17     }
18     ctx.fillText(obj.text, obj.x, obj.y);
19     if (obj.bold) {
20       ctx.fillText(obj.text, obj.x, obj.y + 0.5);
21       ctx.fillText(obj.text, obj.x + 0.5, obj.y);
22     }
23     ctx.restore();
24   },
25   /**
26    * 文本换行
27    *
28    * @param {Object} obj
29    */
30   textWrap: function (ctx,obj) {
31     console.log('文本换行')
32     let tr = this.getTextLine(ctx,obj);
33     for (let i = 0; i < tr.length; i++) {
34       if (i < obj.line) {
35         let txt = {
36           x: obj.x,
37           y: obj.y + (i * obj.height),
38           color: obj.color,
39           size: obj.size,
40           align: obj.align,
41           baseline: obj.baseline,
42           text: tr[i],
43           bold: obj.bold
44         };
45         if (i == obj.line - 1) {
46           txt.text = txt.text.substring(0, txt.text.length - 3) + '......';
47         }
48         this.drawText(ctx,txt);
49       }
50     }
51   },
52   getTextLine: function (ctx,obj) {
53     ctx.setFontSize(obj.size);
54     let arrText = obj.text.split('');
55     let line = '';
56     let arrTr = [];
57     for (let i = 0; i < arrText.length; i++) {
58       var testLine = line + arrText[i];
59       var metrics = ctx.measureText(testLine);
60       var width = metrics.width;
61       if (width > obj.width && i > 0) {
62         arrTr.push(line);
63         line = arrText[i];
64       } else {
65         line = testLine;
66       }
67       if (i == arrText.length - 1) {
68         arrTr.push(line);
69       }
70     }
71     return arrTr;
72   },
canvas 中的文字渲染函数(实现换行 和 加粗)

 

posted @ 2020-02-13 11:10  Zcb0812  阅读(691)  评论(0编辑  收藏  举报