2018项目总结(vue+apicloud)

一、关于字数统计的问题

在使用textarea时常会对textarea中的文字数目进行统计,一般来说,可以使用onkeyup事件来解决问题。

<textarea id="description" οnkeyup="keypress()"></textarea>
<span id="wordsCounting">500字</span>

function keypress(){
  var description = document.getElementById("description").value;
  var remainNum = 500 - description.length;
  if(remainNum < 0){
    remainNum = 0;
    vm.wishContent = description.substring(0,500);
    alert('最多只能输入500个字符哟~');
  }
  document.getElementById("wordsCounting").innerText = remainNum + "字";
}

但是当使用粘贴功能的时候,由于onkeyup事件并没有调用,所以字数统计就会出现问题,因此需要更改一下。

<textarea rows="15" id="description" v-model="content"></textarea>
<span id="wordsCounting">500字</span>
watch: {
  content:
function(curVal,oldVal){   var remainNum = 500 - curVal.length;   if(remainNum < 0){     remainNum = 0;     vm.content = curVal.substring(0,500);     api.alert({   msg: '最多只能输入500个字符哟~', }); } document.getElementById("wordsCounting").innerText = remainNum + "字"; },
},

 

二、关于一段文字的行数计算判断是否显示更多按钮

在获取到文本之后调用vm.countLines();来计算该文段的行数。

<div id="target" class="introduce" :class="isEllipsis == 1?'aui-ellipsis-2':''">
  <div class="aui-margin-l-15 aui-margin-r-15" v-html="wishContent"></div>
</div>  
countLines:function(){
    this.$nextTick(function(){
        var target = document.getElementById("target");
        var styles = window.getComputedStyle(target, null);
        var lh = parseInt(styles.lineHeight, 10);    // 行高
        var h = parseInt(styles.height, 10);    // 文段高度
        var lc = h / lh;    // 行数
        if(lc > 2){
            vm.isEllipsis = 1;  
            $api.css($api.byId("getMore"), 'display:block;');
        }else{
            vm.isEllipsis = 0;
            $api.css($api.byId("getMore"), 'display:none;');
        }
    });
},

三、一行两端对齐的文字(使用了jQuery-weui)

<div class="weui-cells">
    <div class="weui-cell">
        <div class="weui-cell__hd"><span>单号</span></div>:
    	<div class="weui-cell__bd">
    	    <input class="weui-input" type="text" />
    	</div>
    </div>
    <div class="weui-cell">
	<div class="weui-cell__hd"><span>用户名</span></div>:
    	<div class="weui-cell__bd">
    	    <input class="weui-input" type="text" />
    	</div>
    </div>
    <div class="weui-cell">
        <div class="weui-cell__hd"><span>地址</span></div>:
    	<div class="weui-cell__bd">
    	    <input class="weui-input" type="text" />
    	</div>
    </div>
</div>    

 

.weui-cell__hd{
    width: 60px;
    height: 24px;
    padding-left:15px;
    text-align: justify;
    display: inline-block;
}
.weui-cell__hd span:after{
    content:"";
    display: inline-block;
    width: 100%;
    height: 0;
}

效果如图:

 

四、不会被拉伸或者压缩的缩略图(类似微信朋友圈中为保持图片原有比例而只显示图片中间部分)

参考文档:https://www.zhangxinxu.com/wordpress/2015/03/css3-object-position-object-fit/

在显示图片的缩略图时,设置一下缩略图的宽高(width&height),同时给图片添加object-fit:cover;的属性即可。

img{
    width: 2rem;
    height: 2rem;
    object-fit: cover;
}  

 五、一段文字中,中英文使用不同的字体

参考文章来源:https://www.jb51.net/article/25219.htm

function justifyText(text, fontFamily){    // text-需要显示不同字体的文本  fontFamily-
    var newText = "";
    for(var i = 0; i < text.length; i++){
        if(text.charCodeAt(i) > 255){    //遍历判断字符串中每个字符的Unicode码,大于255则为中文 
          newText +=text[i];
        }else{
            newText +="<span style='font-family:"+fontFamily+"!important'>"+text[i]+"</span>";
        }
    }
    return newText;
}    

六、不完整环形进度条(canvas)

设计图如下:

         

<canvas :id="'myCanvas'+index" width="60" height="60" style="margin:0 auto;"></canvas>
<!--由于canvas绘制的图在手机上会失真,因而引用hidpi-canvas.min.js来解决该问题--> <script type="text/javascript" src="../script/hidpi-canvas.min.js"></script>
function drawProgress(index, leftPercent){    // index-获取数据数组后的排序位置 leftPercent-剩余值
    var myCanvas = document.getElementById("myCanvas"+index);
    var textContent = leftPercent +"%";
    var progressX = document.getElementById("myCanvas"+index).offsetWidth / 2;
    var progressY = document.getElementById("myCanvas"+index).offsetHeight / 2;
    var changedArc = 1.9*(100-leftPercent)/100;
    if(changedArc <= 0.4){
        var endArc = 0.4 - changedArc;
    }else if(changedArc > 0.4 && changedArc <= 0.9){
        var endArc = 2 - (changedArc - 0.4);
    }else if(changedArc > 0.9 && changedArc <= 1.4){
        var endArc = 1.5 - (changedArc - 0.9);
    }else if(changedArc >= 1.9){
        var endArc = 0.6;
    }else{
        var endArc = 1 - (changedArc - 1.4);
    }
    var ctx = myCanvas.getContext("2d");
    //总数
    ctx.beginPath();
    ctx.arc(progressX, progressY, 24, 0.4*Math.PI, 0.6*Math.PI, true);            // 横纵坐标、半径、起始角、结束角、顺逆时针(顺时针为false)
    // 轮廓线
    ctx.strokeStyle = "#37CBD5";
    ctx.lineWidth = 5;
    ctx.stroke();
    // 填充区
    ctx.fillStyle = "#37CBD5";
    ctx.font = "10px FZLTXH";
    ctx.fillText("还剩", (progressX-10), progressY-2);
    ctx.font = "10px Helvetica";
    ctx.fillText(textContent, (progressX -    ctx.measureText(textContent).width/2), (progressY+8));     // ctx.measureText().width获取文字长度
    ctx.textAlign="center";
    ctx.textBaseline = "middle";
    ctx.closePath();
    //进度
    ctx.beginPath();
    ctx.arc(progressX, progressY, 24, 0.4*Math.PI, endArc*Math.PI, true);
    ctx.strokeStyle = "#57E3EC";
    ctx.lineWidth = 5;
    ctx.stroke();
    ctx.closePath();
    // 改善canvas在手机端的失真问题
    var getPixelRatio = function(ctx) {
        var backingStore = ctx.backingStorePixelRatio ||
          ctx.webkitBackingStorePixelRatio ||
          ctx.mozBackingStorePixelRatio ||
          ctx.msBackingStorePixelRatio ||
          ctx.oBackingStorePixelRatio ||
          ctx.backingStorePixelRatio || 1;

        return (window.devicePixelRatio || 1) / backingStore;
    };
}

 

七、手机端:整个页面的背景图

当某个页面的背景是一张图且该页面含有输入框的时候,弹出键盘,会使背景图被压缩,发生改变,因此需要防止背景图被压缩。

<div id="app" style="background:url(imagePath);" :style="{'height':bodyHeight+'px'}"></div>
var vm = new Vue({
    el: '#app',
    data: {
        bodyHeight:""
    },
    mounted:function(){
        this.bodyHeight = document.documentElement.clientHeight;
    }
})

 

八、时间戳转化时间(yyyy-mm-dd hh:mm:ss)

/*对Date的扩展,将 Date 转化为指定格式的String
    *月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
    *年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
    *例子:
    *(new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
    *(new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
*/
Date.prototype.Format = function (fmt) { //author: meizz
    var o = {
        "M+": this.getMonth() + 1,                 //月份
        "d+": this.getDate(),                    //
        "h+": this.getHours(),                   //小时
        "m+": this.getMinutes(),                 //
        "s+": this.getSeconds(),                 //
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度
        "S": this.getMilliseconds()             //毫秒
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

function gettingTime(time){
    var date = new Date();
    date.setTime(time);
    return date.Format("yyyy-MM-dd hh:mm:ss");
}

 

九、CST时间(Fri Aug 28 09:37:46 CST 2009)转化日期格式(yyyy-MM-dd hh:mm:ss)

var time = dateFormat(CSTtime, "yyyy-MM-dd hh:mm:ss");
function
dateFormat (date, format) { date = new Date(date); date.setHours(date.getHours()-14); var o = { 'M+' : date.getMonth() + 1, //month 'd+' : date.getDate(), //day 'H+' : date.getHours(), //hour 'm+' : date.getMinutes(), //minute 's+' : date.getSeconds(), //second 'q+' : Math.floor((date.getMonth() + 3) / 3), //quarter 'S' : date.getMilliseconds() //millisecond }; if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); for (var k in o) if (new RegExp('(' + k + ')').test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)); return format; }

 

转载于:https://www.cnblogs.com/song2017/p/10304627.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值