那些酷的代码

复制到粘贴板,去app打开

参考:js实现复制到粘贴板

主要两种方法:

  1. 第三方库:clipboard.js
  2. 原生方法:document.execCommand()

原生版本1:

<button id="btn"></button>
const btn = document.querySelector("#btn")
btn.addEventListener('click',function(){
  // 原生方法只支持input,textarea
  const input = document.createElement('input')
  input.setAttribute('value','这是要复制的内容')
  input.select()
})

原生方法在ios会自动拉起键盘(因为focus了),另外input.select()在ios下并没有选中全部内容,因此还需要input.setSelectionRange(0, input.value.length) 参考:复制内容打开app

获取剪切板的数据
参考:js获取剪切板内容(segmentfault)

关于进制转换

任意进制之间转换
参考:进制转换

// js实现parseInt
function _parseInt (string, radix) {
  if (typeof string !== "string" && typeof string !== "number") return NaN;
  if (radix && (typeof radix !== "number" || /^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/.test(radix) || radix > 36 || radix < 2)) return NaN;
  string = String(string)
  var rexp = (radix == 10) ? /(-?)([0]?)([0-9]+)/ : /(-?)([0]?[Xx]?)([0-9a-fA-F]+)/,
      a = string.match(rexp),
      sign = a[1],
      rawRadix = a[2],
      rawNum = a[3],
      result = 0,
      strArr = rawNum.split(''),
      len = strArr.length,
      numArr = [];
  if (a && !radix) {
      if ( rawRadix.toUpperCase() === "0X") {
          radix = 16;
      } else if (rawRadix === "0") {
          radix = 8;
      } else {
          radix = 10;
      }
  }
  for (var i = 0; i < len; i++){
      var num;
      var charCode = strArr[i].toUpperCase().charCodeAt(0);
      if(radix <=36 && radix >= 11) {
          if (charCode >= 65 && charCode <= 90) {
              num = charCode - 55;
          } else {
              num = charCode - 48;
          }
      }  else {
          num = charCode - 48;
      }
      if (num < radix) {
          numArr.push(num);
      } else {
          return NaN
      };
  }
  if(numArr.length > 0) {
    numArr.forEach(function(item, j){
        result += item * Math.pow(radix, numArr.length-j-1);
    })
  }
  if(sign === "-"){
    result = -result;
  }
  return result
}

Number.prototype.toString()
注意:在其他对象(Object,Array,Boolean,String,Function,RegExp)上也有这个toString()方法,都是覆盖的Objcet对象的toString方法。

Number 对象覆盖了 Object 对象上的 toString() 方法,它不是继承的 Object.prototype.toString()。对于 Number 对象,toString() 方法以指定的基数返回该对象的字符串表示。

如果转换的基数大于10,则会使用字母来表示大于9的数字,比如基数为16的情况,则使用a到f的字母来表示10到15。

如果基数没有指定,则使用 10。

如果对象是负数,则会保留负号。即使radix是2时也是如此:返回的字符串包含一个负号(-)前缀和正数的二进制表示,不是 数值的二进制补码。

进行数字到字符串的转换时,建议用小括号将要转换的目标括起来,防止出错。

// radix 指定要用于数字到字符串的转换的基数(从2到36)。如果未指定 radix 参数,则默认值为 10。
numObj.toString([radix])

var count = 10;

console.log(count.toString());    // 输出 '10'
console.log((17).toString());     // 输出 '17'
console.log((17.2).toString());   // 输出 '17.2'

var x = 6;

console.log(x.toString(2));       // 输出 '110'
console.log((254).toString(16));  // 输出 'fe'
console.log((10).toString(8));  // 输出 '12'

console.log((-10).toString(2));   // 输出 '-1010'
console.log((-0xff).toString(2)); // 输出 '-11111111'

关于进度条

直线进度条
参考:不可思议的css滚动进度条效果(掘金)

环形进度条
参考:环形进度条实现方法总结circle progress 环形进度条

方式总结:

  • 粗暴直接,用多个sprite图拼接
  • 一个环形底图,两个半圆,js旋转半圆实现
  • canvas画布
  • svg

仪表盘进度条

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>HTML5中的SVG属性实现圆形进度条效果</title>
  <style>
    @keyframes offset {
      0% {
        stroke-dashoffset: 942px;
      }
    }
    .ball {
      animation: offset 2s linear infinite;
    }
  </style>
</head>
<body>
  <svg width="400px" height="300px" version="1.1" viewBox="0 0 581 327" xmlns="http://www.w3.org/2000/svg">
    <g fill="none" transform="translate(300,250)" stroke-width="1" fill-rule="evenodd">
      <defs>
        <linearGradient x1="100%" y1="0%" x2="0%" y2="0%" id="a">
          <stop stop-color="#5694E7" offset="0%"></stop>
          <stop stop-color="#4963DE" offset="100%"></stop>
        </linearGradient>
      </defs>
      <path fill="none" d="M-130,75 A150,150,125,1,1,130,75 " opacity="0.1" stroke="#4963DE" stroke-width="20"
        stroke-linecap="round" />
      <path id="ring" class="ball" fill="none" stroke-width="20" stroke-dasharray="942 942" stroke-linecap="round"
        stroke="url(#a)" />
      <text font-family="PingFangSC-Medium, PingFang SC" font-size="30" font-weight="400" fill="#222222">
        <tspan x="-280" y="-125">消费额度</tspan>
      </text>
      <text font-family="Helvetica-Bold, Helvetica" font-size="56" font-weight="bold" fill="#4963DE">
        <tspan x="-110" y="2">8,880.00</tspan>
      </text>
      <text font-family="PingFangSC-Regular, PingFang SC" font-size="24" font-weight="normal" fill="#888888">
        <tspan x="-50" y="-50">可用额度</tspan>
      </text>
      <text font-family="PingFangSC-Regular, PingFang SC" font-size="20" x="-80" y="50" font-weight="normal">
        <tspan fill="#888888">总额度:</tspan>
        <tspan font-family="PingFangSC-Medium, PingFang SC" font-weight="400" fill="#222222">10,000.00
        </tspan>
      </text>
      <path stroke="#E4E4E4" stroke-linecap="square"></path>
    </g>
  </svg>
</body>
</html>
function getRealXY( x, y, p ) {
  const x1 = x * Math.cos( p ) + y * Math.sin( p );
  const y1 = y * Math.cos( p ) - x * Math.sin( p );
  return {
    x1: x1.toFixed( 2 ), y1: y1.toFixed( 2 ),
  };
}

let path = document.getElementById( 'ring' );
let r = 150;
let progress = 1;
// 计算当前的进度对应的角度值
let angle = progress * ( Math.PI / 180 ) * 240;

// 偏转角度 固定为30度
let pianzhuan = 30 * ( Math.PI / 180 );

//极坐标转换成直角坐标
let x = -( Math.cos( angle ) * r ).toFixed( 2 );
let y = -( Math.sin( angle ) * r ).toFixed( 2 );

//大于180度时候画大角度弧,小于180度的画小角度弧,(deg > 180) ? 1 : 0
let lenghty = window.Number( progress * 240 > 180 );
console.log( 'angle', angle );
console.log( 'lenghty', lenghty );
const { x1, y1 } = getRealXY( x, y, pianzhuan );
console.log( x1, y1 );
//path 属性
let descriptions = [ 'M', -130, 75, 'A', r, r, 75, lenghty, 1, x1, y1 ];

// 给path 设置属性
path.setAttribute( 'd', descriptions.join( ' ' ) );

最近的文章

About git

参考:阮一峰-常用 git 命令操作参考:阮一峰-远程操作详解参考:阮一峰-工作流SSH为 Secure Shell 的缩写,是一种网络协议,用于计算机之间的加密登录,如果一个用户从本地计算机,使用ssh协议登录另一台远程计算机,我们可以认为这种登录是安全的,即使被中途截获,密码也不会泄露。ssh之所以安全,因为他采用公钥加密过程: 远程主机收到用户的登录请求,把自己的公钥发给用户, 用户使用这个公钥,将登陆密码加密后,发送给远程主机, 远程主机用自己的私钥,解密登录密码,如果密码正...…

继续阅读
更早的文章

eslint使用

eslint中文文档 eslint简单使用 几种不同的代码规范 官方eslint1、eslint代码检测工具注意事项: eslint可以使用使用全局的(usr/local/lib/node_modules/eslint),也可以是用项目内安装的(node_modules/.bin/eslint) 若项目里有.eslintrc文件,且root:true,则不会读取全局环境的配置,只会读项目内的 所有规则默认是禁用的,使用 “extends”: “eslint:recommende...…

继续阅读