js,vue常见问题和方法记录

1.动态控制元素高度时如何让滚动条同步在底部

//选中元素
var content = document.getElementById('content');    
setTimeout(function(){ //高度变化后执行操作
   content.scrollIntoView(false)
 })

2.获取当前日期时间 返回格式 2020-03-18 11:52:10

getNowFormatDate() {//获取当前时间
	  var date = new Date();
	  var seperator1 = "-";
	  var seperator2 = ":";
	  var month = date.getMonth() + 1<10? "0"+(date.getMonth() + 1):date.getMonth() + 1;
	  var strDate = date.getDate()<10? "0" + date.getDate():date.getDate();
	  var currentdate = date.getFullYear() + seperator1  + month  + seperator1  + strDate
	      + " "  + date.getHours()  + seperator2  + date.getMinutes()
	      + seperator2 + date.getSeconds();
	  return currentdate;
}

3.获取数组最大值下标

//方式一
var nvalue = 0, index = -1;
for (var i = 0; i < arrData.length; i++) {
   if (arrData[i] > nvalue) {
     nvalue = arrData[i];
     index = i
   }
 }   
//最大的那个值
console.log(nvalue)
//最大值的索引
console.log(index)

//方式二
var max = Math.max(...arrData); //最大值
var indexOfMax = arrData.indexOf(max); //最大值下标

4.秒数/毫秒转为天时分秒

//秒数转换
function secondsFormat( s ) { 
    var day = Math.floor( s/ (24*3600) ); // Math.floor()向下取整
    var hour = Math.floor( (s - day*24*3600) / 3600); 
    var minute = Math.floor( (s - day*24*3600 - hour*3600) /60 ); 
    var second = s - day*24*3600 - hour*3600 - minute*60; 
    return day + "天"  + hour + "时" + minute + "分" + second + "秒"; 
}    
secondsFormat(60) //"0天0时1分0秒"

//毫秒转换
function checkTime(i) { //将0-9的数字前面加上0,例1变为01
    return (i < 10 ? "0" + i : i);
}
function leftTimer(time) {
    leftTime = time; //计算剩余的毫秒数
    var days = parseInt(leftTime / 1000 / 60 / 60 / 24, 10); //计算剩余的天数
    var hours = parseInt(leftTime / 1000 / 60 / 60 % 24, 10); //计算剩余的小时
    var minutes = parseInt(leftTime / 1000 / 60 % 60, 10);//计算剩余的分钟
    var seconds = parseInt(leftTime / 1000 % 60, 10);//计算剩余的秒数
    days = checkTime(days);
    hours = checkTime(hours);
    minutes = checkTime(minutes);
    seconds = checkTime(seconds); var timeData = (days + "天" + hours + "小时" + minutes + "分" + seconds + "秒");
    return  timeData
}    
leftTimer(6000) //"00天00小时00分06秒"

5.随机返回颜色或随机返回数组中一个元素

//返回随机颜色      
function randomColor(index) { 
    var r = Math.floor(Math.random() * 256);
    var g = Math.floor(Math.random() * 256);
    var b = Math.floor(Math.random() * 256);
    var color = '#' + r.toString(16) + g.toString(16) + b.toString(16);
    return color;
}
//随机返回数组中一个元素 
var colorList = ['#24D0C6','#FA766B','#3898EC','#F68411'];
var randomItem = colorList[Math.floor(Math.random()*colorList.length)];
console.log("返回的随机元素",randomItem)

6.获取点击的当前元素距离浏览器边界的坐标

showCard:function(ev){
	  var oEvent=ev||event;
	  this.cardX = oEvent.clientX - 100;
	  this.cardY = oEvent.clientY - 70;
	  console.log("x",this.cardX,"y",this.cardY)
}

7.鼠标移入移出事件

@mouseenter="showBtn()" @mouseleave="hideBtn()"

8.超过4位数字转为1w,并保留两位小数

function convertJoinCount(num) {
	  num = Number(num);
	  if (isNaN(num)) {
	    return 0;
	  }
	  var w = num / 10000;
	  w = w.toFixed(2);
	  if (w > 99) {
	    w = 99;
	  }
	  if (w >= 1) {
	    return w + 'w';
	  }
	  return num;
}

9.H5点击表单后界面上移

var _pagePanel = $('#page-panel'),_eventBtn = _pagePanel.find('input');
_eventBtn.on('blur', function () {
    window.scrollTo(0, 0);
});
_eventBtn.on('focus', function () {
    var clientHeight = document.documentElement.clientHeight || document.body.clientHeight;
    var offsetTop = $(this).offset().top - (clientHeight / 4);
    window.scrollTo(0, offsetTop);
});

10.生成随机数

 function generateNonceString() {
      var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
      var length_1 = 16;
      var noceStr = '';
      var maxPos = chars.length;
      while (length_1--)
          noceStr += chars[Math.random() * maxPos | 0];
      return noceStr;
  }

11.表单浏览器回填问题

<form role="form" autocomplete="off">
  <!--文本类-->
  <input type="text" autocomplete="off"/>  
  <!--密码类-->
  <input type="password" autocomplete="new-password"/>  
</form>
  现在浏览器带有自动填充,一般在input标签中增加autocomplete="off" 可以进行控制

12.vue中循环一个列表,点击其中一个进入详情,跳转路径正确,但有的显示空白?

解决:查看接口返回字段进行对比,如果有的字段在子列表详情中没有,则需要做容错处理,否则会显示空白

13.父组件向子组件传值后,子组件内props显示为空,但是在父组件中又能打印出来

解决:在引入的自组件上加v-if=“传入的值”

14.vue中tab菜单做权限,切换时根据权限判断,没权限返回到第一个菜单?

1)在需要判断的页面事件中
     this.$router.push('随便一个路径')2)再随便路径的页面中,加路由守卫钩子
    //在当前路由改变,但是该组件被复用时调用,可以达到刷新页面的作用
    beforeRouteEnter (to, from, next) {
       next(vm => {
         vm.$router.replace(from.path)
       })
     }

15.动态修改el-select中的label

当value是数字label是文字时
    修改model中的值然后.toString()

16.获取当前终端

function getPlatform() {
   var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
   var flag = "pc";
   for (var v = 0, len = Agents.length; v < len; v++) {
       if (userAgent.indexOf(Agents[v]) > 0) {
           flag = "mobile";
           break;
       }
   }
   return flag;
}

17.获取手机系统

function getPhoneSystem() {
    var ua = navigator.userAgent.toLowerCase();
    if (ua.indexOf("android") != -1) return "android";
    if (ua.indexOf("iphone") != -1) return "ios";
    return "others";
}

18.是否是公众号,小程序环境

let userAgent = navigator.userAgent;
//是否微信浏览器(公众号)
function isWX() {
    if (/(micromessenger)\/([\w\.]+)/i.test(userAgent) && !/miniprogram/i.test(userAgent)) {
        return true;
    }
    return false;
}
//是否小程序
function isMiniprogram() {
    if (/(micromessenger)\/([\w\.]+)/i.test(userAgent) && /miniprogram/i.test(userAgent)) {
        return true;
    }
    return;
},

19.获取当前url参数

function getQueryString(name) {
    //构造一个含有目标参数的正则表达式对象
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); 
    //匹配目标参数
    var r = location.search.substr(1).match(reg); 
    //获取hash参数
    //var r = location.hash.substr(1).match(reg); 
    if (r != null) {
        var ret = r[2];
        try {
            ret = decodeURIComponent(ret);
        } catch (e) {
            ret = unescape(ret);
        }
        return ret;
    }
    return null; //返回参数值
}

20.html引用js文件

function createScript(url, cb) {
   if (!!url) {
        var $script = $('
                    
                    

你可能感兴趣的:(vue,js常见问题)