跳至主要內容

工作随笔

Mr.Cao...大约 2 分钟

工作随笔

正则表达式真正判断字符串长度

js对Unicode字符的支持是采用\uxxxx形式表示的,其中xxxx表示字符的Unicode码点,但是这样的表示方法只能表示\u0000-\uFFFF之间的字符,超出这个范围的字符,必须采用四字节的形式表示。但是这样以来导致 '𠮷'.lenth=2
例如:

	'\ud842\udfb7'==='𠮷' // true
	'𠮷'.length===2 // true

因此我们需要一个精准匹配字符串的lenth的方法返回字符传的串的个数的函数,
此时我们可以利用es6对正则表达是提供的u修饰符,在用match方法匹配到字符之后,获取返回的数组的长度即为字符串的真实长度
代码

	if(!String.prototype.customPointLength){
		String.prototype.customPointLength=function(){
			const text=this.toString()
			const result=text.match(/[\s\S]/gu)
			return result?result.length:0
		}
		
	}
	// test 
	const s='𠮷'
	s.customPointLength() // 1 

nice ! 这样就可以返回字符串的真实长度见到一些双子节形式表达的生僻字或者符号也不算问题了

web端监听页面是否在滚动的方法

最近有做到需求需要判断页面是否在滚动状态,因此上写了一个函数,大概意思是做一个时间差判断下一次top值跟当前相等不相等,是在小程序环境下写的,因此代码是小程序代码,其他端万变不离其宗,onPageScroll是小程序钩子里边的页面滚动方法具体如下:

onPageScroll(e){
	const scrollTop=e.top
	this.data.scrollTop = scrollTop // 保存当次滚动的值
    if (!this.data.timer) {
      clearTimeout(this.data.timer)
    }
    this.data.timer = setTimeout(() => {
      if (scrollTop === this.data.scrollTop) { // 200ms后再与上一次的比较 想等就代表停止滚动了
        this.setData({isScroll: false})
      }
    }, 200)
    this.setData({isScroll: true}) // 其他情况表示 正在滚动
}
上次编辑于:
贡献者: Caofangshuai
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.8