第19次修改了可删除可持久保存的前端html备忘录:换了一个特别的倒计时时钟

news2024/11/17 20:33:16

第19次修改了可删除可持久保存的前端html备忘录:换了一个特别的倒计时时钟

 

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>与妖为邻的文本备忘录</title>
</head>
<style>
  * {
    list-style-type: none;
    /* 外边距 */
    margin: 0;
    /* 内边距区域 */
    padding: 0;
    /* 盒子模型:元素的宽度和高度将包括内容区、内边距和边框,但不包括外边距 */
    box-sizing: border-box;
  }
  body {
    min-height: 100vh;
  }
  input,
  button {
    /* 字体大小 */
    font-size: 18px;
    /* 鼠标变小手 */
    cursor: pointer;
    /* 圆角*/
    border-radius: 5px;
    /* 内边距上下0 左右5 */
    padding: 0px 5px;
  }
  /* 标题区布局开始************************** */
  .hdiv {
    width: 100%;
    height: 65px;
    /* position: relative; */
    position: fixed;
    dfn {
      position: fixed;
      top: 10px;
      left: 0;
      /* 内边距上下0 左右5 */
      padding: 0px 5px;
      /* 圆角*/
      border-radius: 50px;
    }
    b {
      position: fixed;
      top: 10px;
      left: 116px;
      /* 圆角*/
      border-radius: 50%;
      /* 内边距上下0 左右5 */
      padding: 0px 5px;
    }
    #link {
      position: fixed;
      height: 45px;
      top: 10px;
      left: 210px;
      /* 外边距 */
      margin: 0 15px;
      font-size: 30px;
    }
    /* 当前时间布局开始************************** */
    .newtime {
      width: 495px;
      height: 65px;
      position: fixed;
      top: 0px;
      left: 358px;
      /* 圆角*/
      border-radius: 20%;
      #clock {
        position: fixed;
        top: 10px;
        left: 365px;
        /* 字体大小 */
        font-size: 30px;
      }
      /* 翻盘时间显示开始************************** */
      .show {
        display: flex;
        top: -5px;
        left: 295px;
        width: 200px;
        height: 75px;
        position: relative;
        .time {
          display: flex;
          flex: 1;
          font-size: 40px;
          text-align: center;
          line-height: 75px;
          padding: 0 10px;
          overflow: hidden;
          position: absolute;
          top: 0px;
          left: 5px;
          right: 5px;
        }
        .beforeTime {
          z-index: 100;
        }
        .time li:nth-child(2n) {
          flex: 1;
        }
        .time li:nth-child(2n+1) {
          flex: 4;
          position: relative;
          height: 50px;
          line-height: 50px;
          margin: auto 0px;
          border-radius: 10px;
        }
        .time li:nth-child(2n+1) .upBox,
        .time li:nth-child(2n+1) .downBox {
          position: absolute;
          left: 0;
          right: 0;
        }
        .time li:nth-child(2n+1) .upBox {
          top: 0;
          bottom: 50%;
          box-sizing: border-box;
          transform-origin: bottom;
          border-radius: 5px 5px 0 0;
        }
        .time li:nth-child(2n+1) .downBox {
          top: 50%;
          bottom: 0;
          line-height: 0;
          box-sizing: border-box;
          overflow: hidden;
          transform-origin: top;
          border-radius: 0 0 5px 5px;
        }
        /* 翻盘时间显示结束************************** */
      }
      /* 当前时间布局结束************************** */
    }
    .gap {
      position: fixed;
      top: 2px;
      left: 855px;
      font-size: 30px;
      border-radius: 50%;
      /* 内边距上下10 左右15 */
      padding: 10px 15px;
    }
    /*************************倒计时开始********************************/
    #countdown {
      padding: 0 5px;
      width: 483px;
      /* position: fixed; */
      position: relative;
      top: 0px;
      left: 1008px;
      display: flex;
      gap: 5px;
      /* 角 */
      border-radius: 20%;
      .circle {
        position: relative;
        width: 75px;
        height: 75px;
        border-radius: 50%;
        display: flex;
        justify-content: center;
        align-items: center;
        box-shadow: 0 5px 5px rgba(216, 189, 189, 0.363);
        &::before {
          content: '';
          position: absolute;
          border-radius: 50%;
          inset: 0;
          border: 5px solid #000000;
        }
        &::after {
          content: '';
          position: absolute;
          width: 50px;
          height: 50px;
          border-radius: 50%;
          background: #05a388;
          box-shadow: inset 0 1px 1px rgba(204, 150, 150, 0.694);
        }
        & svg {
          width: 75px;
          height: 75px;
          position: relative;
          transform: rotate(270deg);
          & circle {
            width: 100%;
            height: 100%;
            fill: transparent;
            stroke-width: 4;
            stroke: var(--clr);
            stroke-linecap: round;
            transform: translate(2.5px, 2.5px);
            stroke-dasharray: 220;
            stroke-dashoffset: 220;
          }
        }
        & div {
          position: absolute;
          text-align: center;
          font-weight: 1000;
          color: #ffff;
          z-index: 5000;
          color: var(--clr);
          font-size: 30px;
          line-height: 0.6;
        }
      }
      .tsfm {
        position: relative;
        top: 14px;
        left: -1px;
        font-size: 35px;
      }
      /*************************倒计时结束********************************/
    }
    /* 标题区布局结束************************** */
  }
  /* 备忘信息区布局开始************************** */
  #oContent {
     margin:  65px 0;
    /* 复选框样式开始 */
    input[type="checkbox"] {
      margin: 0px 10px;
      -webkit-appearance: none;
      appearance: none;
      width: 25px;
      height: 25px;
      position: relative;
      border-radius: 50%;
    }
    input[type="checkbox"]::after {
      content: "";
      width: 100%;
      height: 100%;
      border: 2px solid #e9f504;
      position: absolute;
      left: -3px;
      top: -3px;
      border-radius: 50%;
      /* 复选框样式开始 */
    }
    /* 设置复选框点击之后的样式*/
    input[type="checkbox"]:checked::after {
      height: 15px;
      width: 25px;
      border-top: none;
      border-right: none;
      border-radius: 0;
      transform: rotate(-45deg);
      transition: all 0.5s ease-in-out;
      /* 设置复选框点击之后的样式结束*/
    }
    span {
      border-radius: 20px;
      padding: 0 10px;
    }
    /* 备忘信息区布局结束************************** */
  }
  /* 隐藏的文本操作框布局开始 ***************************/
  .login {
    display: none;
    width: 650px;
    position: fixed;
    left: 70%;
    top: 50%;
    border-radius: 15px 15px 0 0;
    z-index: 9999;
    transform: translate(-90%, -90%);
    border-radius: 15px;
    .login-title {
      border-radius: 15px 15px 0 0;
      width: 100%;
      line-height: 40px;
      height: 40px;
      font-size: 20px;
      position: relative;
      cursor: move;
      .cl1ose-login {
        margin: 0 10px;
      }
      #closeBtn {
        padding: 0px 10px 0px 10px;
        /*设置X靠右*/
        float: right;
        /*设置边框圆角*/
        /*设置文字大小*/
        font-size: 38px;
        top: -2px;
        right: 5px;
        /*设置绝对定位*/
        position: absolute;
        /*设置去掉斜体文字属性*/
        font-style: normal;
        /*设置鼠标悬停时显示小手*/
        cursor: pointer;
        &:hover {
          color: #6b6b6b;
        }
      }
    }
    .up-div {
      display: flex;
      /*设置主轴方向 垂直显示*/
      flex-direction: column;
      border-radius: 10px;
      height: 205px;
      margin: 10px;
      #myForm {
        display: flex;
        /*设置主轴方向 垂直显示*/
        flex-direction: column;
        box-sizing: border-box;
        border-radius: 10px;
        margin: 10px;
        padding: 5px;
        background-color: #c4a32c;
        & input[type="file"] {
          margin: 10px;
          background-color: #11b711;
          border-radius: 10px;
        }
        & textarea {
          font-size: 20px;
          /* 高 */
          height: 32px;
          border-radius: 5px;
          /* 居中 */
          display: flex;
          justify-content: center;
          margin: 0 10px;
          &::placeholder {
            font-size: 22px;
          }
        }
        div {
          margin: 10px;
          display: flex;
          /*设置主轴方向 垂直显示
            flex-direction: center;*/
          /*设置	居中排列。*/
          justify-content: center;
          gap: 80px;
        }
      }
      .up-div1 {
        margin: 10px;
        display: flex;
        justify-content: space-between;
      }
    }
    sub {
      /* 居中 */
      display: flex;
      justify-content: center;
      border-radius: 5px;
      margin: 10px;
    }
    .site {
      border-radius: 10px;
      margin: 10px;
      button {
        margin: 5px;
      }
    }
    /* 隐藏的文本操作框布局结束 ***************************/
  }
  /* 背景颜色布局******************************************************** */
  body {
    background: radial-gradient(at 60% 0%, #5190b0, #235746);
  }
  .hdiv {
    background: linear-gradient(0.25turn, rgb(110, 123, 108), rgb(204, 232, 207), #f7d6d6);
  }
  button,
  b,
  dfn {
    background-color: #ff0000;
  }
  #countdown,
  .newtime {
    background-color: #48603f;
  }
  input,
  .gap {
    background-color: rgb(171, 5, 5);
  }
  input:hover,
  button:hover,
  textarea,
  sub,
  #oContent {
    background: #303745;
  }
  /*3D背景样式*/
  sub,
  #countdown,
  input,
  .site,
  .up-div,
  .gap,
  button,
  b,
  .newtime,
  button {
    background-image: linear-gradient(to top left,
        rgba(0, 0, 0, 0.2),
        rgba(0, 0, 0, 0.2) 30%,
        rgba(0, 0, 0, 0));
    box-shadow: inset 4px 4px 4px rgba(255, 255, 255, 0.6),
      inset -4px -4px 5px rgba(0, 0, 0, 0.6);
    border: 0px solid black;
  }
  /* 凹进去的样式 */
  #myForm,
  #oContent span,
  dfn,
  button:active,
  input:active {
    box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.6),
      inset 2px 2px 3px rgba(0, 0, 0, 0.6);
  }
  .time li:nth-child(2n+1) {
    box-shadow: 0px 0px 1px 1px rgb(1, 0, 0);
  }
  .time li:nth-child(2n+1) .upBox,
  .time li:nth-child(2n+1) .downBox {
    background-color: #3b3d3b;
    ;
    /* 删除线 加颜色*/
    text-decoration: line-through;
    text-decoration-color: #3b3d3b;
    ;
  }
  /* 文本颜色布局***************************************** */
  input,
  ::placeholder,
  textarea,
  sub,
  .cl1ose-login,
  .login-title,
  a,
  .gap,
  button,
  b,
  dfn {
    color: #fff;
    text-shadow: 1px 1px 1px #000;
  }
  input:hover,
  button:hover,
  .delete {
    color: #f0e80a;
    text-shadow: 1px 1px 1px #000;
  }
  b {
    text-shadow: 0px 1px 0px #999,
      0px 2px 0px #888,
      0px 3px 0px #777,
      0px 4px 0px #666,
      0px 5px 0px #555,
      0px 6px 0px #444,
      0px 7px 0px #333,
      0px 8px 7px #001135;
  }
  .show {
    color: #ffffff;
  }
  .tsfm,
  #clock {
    color: #ff0000;
    text-shadow: 1px 1px 1px #000;
  }
  a {
    color: #5190b0;
    text-shadow: 1px 1px 1px #000;
  }
  span {
    color: #75c6b2;
    text-shadow: 1px 1px 1px #000;
  }
  .finish {
    /* 下划线 */
    text-decoration: underline;
    text-decoration-color: rgb(255, 0, 0);
    background-color: rgb(191, 210, 255);
    color: rgb(255, 250, 250);
    text-shadow: 1px 1px 1px #030303;
    box-shadow:
      inset -2px -2px 3px rgba(255, 255, 255, 0.6),
      inset 2px 2px 3px rgba(0, 0, 0, 0.6);
  }
  .login {
    background-color: #cce7cc;
    border: #ebebeb solid 1px;
  }
  .login-title {
    background-color: #b5c7b5;
  }
  .site,
  .up-div {
    background-color: rgba(173, 17, 17, 0.5);
  }
</style>
<!-- <body background="yyds6.jpg" style="background-repeat:no-repeat;
background-attachment:fixed;
background-size:100% 100%; "> -->
<body>
  <div class="hdiv">
    <h1>
      <dfn>memo</dfn>
      <b>备忘录</b>
    </h1>
    <button id="link" href="javascript:;">文本操作</button>
    <!-- 当前时间 -->
    <div class="newtime">
      <div id="clock"></div>
      <!-- 翻盘时间显示开始 -->
      <div class="show">
        <ul class="time">
          <li>
            <div class="upBox beforeTime"></div>
            <div class="downBox beforeTime"></div>
            <div class="upBox afterTime"></div>
            <div class="downBox afterTime"></div>
          </li>
          <li>:</li>
          <li>
            <div class="upBox beforeTime"></div>
            <div class="downBox beforeTime"></div>
            <div class="upBox afterTime"></div>
            <div class="downBox afterTime"></div>
          </li>
          <li>:</li>
          <li>
            <div class="upBox beforeTime"></div>
            <div class="downBox beforeTime"></div>
            <div class="upBox afterTime"></div>
            <div class="downBox afterTime"></div>
          </li>
        </ul>
        <!-- 翻盘时间显示结束 -->
      </div>
      <!-- 当前时间结束 -->
    </div>
    <div class="gap">距离五一</div>
    <!-- 倒计时 -->
    <div id="countdown">
      <div class="circle" style="--clr:#18e3c1;">
        <svg>
          <circle cx="35" cy="35" r="35" id="dd"></circle>
        </svg>
        <div id="days">00</div>
      </div>
      <div class="tsfm">天</div>
      <div class="circle" style="--clr:#41cb35;">
        <svg>
          <circle cx="35" cy="35" r="35" id="hh"></circle>
        </svg>
        <div id="hours">00</div>
      </div>
      <div class="tsfm">时</div>
      <div class="circle" style="--clr:#98aafc;">
        <svg>
          <circle cx="35" cy="35" r="35" id="mm"></circle>
        </svg>
        <div id="minutes">00</div>
      </div>
      <div class="tsfm">分</div>
      <div class="circle" style="--clr:#ec1313;">
        <svg>
          <circle cx="35" cy="35" r="35" id="ss"></circle>
        </svg>
        <div id="seconds">00</div>
      </div>
      <div class="tsfm">秒</div>
      <!-- 倒计时结束 -->
    </div>
    <!-- ----文本操作框-------------------------------- -->
    <div id="login" class="login">
      <div id="title" class="login-title">
        <span class="cl1ose-login">文本操作</span>
        <i href="javascript:void(0);" id="closeBtn">&times</i>
      </div>
      <div class="up-div">
        <form id="myForm">
          <input type="file" name="inputfile" accept="text/plain, text/css, text/html, text/javascript, text/markdown"
            class="background3D" />
          <textarea class="up-textarea" name="uptextarea" rows="1" cols="30%"
            placeholder="请选择txt、js、css或html文件,文件内容会被自动读取"></textarea>
          <div>
            <button type="text" class="up-button">添加</button>
            <input type="reset" value="重置">
          </div>
        </form>
        <hr>
        <div class="up-div1">
          <button id="openButton">打开URL</button>
          <button class="a-href"><a href="https://blog.csdn.net/lulei5153?spm=1011.2415.3001.5343"
              target="_blank">与妖为邻</a></button>
          <button class="a-href"> <a href="https://www.bilibili.com/" target="_blank"> 哔哩哔哩 </a> </button>
          <button id="up-button1" class="delete">对选择删除</button>
        </div>
      </div>
      <sub> &lt;button class="a-href"&gt;
        &lt;a href="输入网站地址" target="_blank"&gt;
        输入网站名称
        &lt;/a&gt; &lt;/button&gt;
      </sub>
      <div class="site">
        <button class="a-href"> <a href="https://www.runoob.com/" target="_blank"> 菜鸟教程 </a> </button>
        <button class="a-href"> <a href="https://cn.vuejs.org/" target="_blank"> JavaScript 框架vue </a></button>
        <button class="a-href"> <a href="https://www.w3ccoo.com/" target="_blank"> w3schools 教程 </a> </button>
        <button class="a-href"><a href="https://www.baidu.com/s" target="_blank">百度一下</a></button>
        <button class="a-href"> <a href="https://zh.javascript.info/" target="_blank"> 现代 JavaScript 教程 </a> </button>
        <button class="a-href"> <a href="https://www.dedexuexi.com/" target="_blank"> 建站学习网 </a></button>
        <button class="a-href"> <a href="https://www.dedexuexi.com/tool/3D/" target="_blank"> CSS3D字体 </a></button>
        <button class="a-href"><a href="https://element-plus.org/zh-CN/" target="_blank">Vue3组件库</a></button>
      </div>
    </div>
  </div>
  <hr>
  <!-- ----备忘录内容容器--------------------------- -->
  <div id="oContent">
  </div>
</body>
</body>
<script>
  /* **************************当前时间函数********************************** */
  function showTime(clock) {
    var now = new Date();
    var year = now.getFullYear();
    var month = now.getMonth();
    var day = now.getDate();
    month = month + 1;
    var arr_work = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");
    var week = arr_work[now.getDay()];
    // var time = year+"年"+month+"月"+day+"日 "+ week+" "+hour+":"+minu+":"+second;
    var time = year + "年" + month + "月" + day + "日 " + week;
    clock.innerHTML = time;
  }
  window.onload = function () {
    var clock = document.getElementById("clock");
    window.setInterval("showTime(clock)", 1000);
    var text = document.getElementsByName('uptextarea')[0],
      inputFile = document.getElementsByName('inputfile')[0];
    //上传文件
    inputFile.onchange = function () {
      console.log(this.files);
      var reader = new FileReader();
      reader.readAsText(this.files[0], 'UTF-8');
      reader.onload = function (e) {
        // urlData就是对应的文件内容
        var urlData = this.result;
        text.value = urlData;
      };
    };
  }
  /* **************************翻盘时间函数***********************************/
  //格式化时间
  const formatTime = (time) => {
    if (time < 10) time = '0' + time
    return time
  }
  //翻转前面下面的盒子向上180deg
  const rotateUp = (ele, time, n) => {
    //传入的为一开始翻转的元素,即前面下面的盒子,以及新时间,以及第几个li盒子
    let rotateDeg = 0;
    ele.style.zIndex = 50;
    //这个是所有上面的盒子
    const allUpBox = document.querySelector(`li:nth-child(${n})`).querySelectorAll('.upBox');
    //所有前面的盒子
    const beforeTime = document.querySelector(`li:nth-child(${n})`).querySelectorAll('.beforeTime');
    // 让上面后面的盒子先不可见,然后设置为270°
    allUpBox[1].style.display = 'none';
    allUpBox[1].transform = `rotateX(270deg)`;
    const animation = () => {
      rotateDeg += 3;
      ele.style.transform = `perspective(500px) rotateX(${rotateDeg}deg)`;
      if (rotateDeg == 90) {
        //让它更新为最近时间后隐藏
        ele.innerHTML = time
        ele.style.zIndex = -1;
        //让刚刚上面隐藏的盒子重新显示出来并且完成90°-180°的旋转
        allUpBox[1].style.display = 'block';
        allUpBox[0].style.zIndex = 1;
        rotateDown(allUpBox[1])
        allUpBox[1].style.zIndex = 1;
      }
      if (rotateDeg == 150) {
        beforeTime[0].innerHTML = time
      }
      if (rotateDeg < 180) {
        requestAnimationFrame(animation);
      }
    }
    animation()
  }
  const rotateDown = (ele) => {
    let rotateDeg = 270;
    const animation = () => {
      rotateDeg += 3;
      ele.style.transform = `perspective(500px) rotateX(${rotateDeg}deg)`;
      if (rotateDeg < 360) {
        requestAnimationFrame(animation);
      }
    }
    animation()
  }
  let time = new Date();
  let oldHour = time.getHours();
  var oldMinute = time.getMinutes();
  var oldSecond = time.getSeconds();
  document.querySelector('li:nth-child(1)').querySelectorAll('.beforeTime').forEach(ele => ele.innerHTML = formatTime(oldHour));
  document.querySelector(' li:nth-child(3)').querySelectorAll('.beforeTime').forEach(ele => ele.innerHTML = formatTime(oldMinute));
  document.querySelector(' li:nth-child(5)').querySelectorAll('.beforeTime').forEach(ele => ele.innerHTML = formatTime(oldSecond));
  const changeTime = () => {
    let time = new Date();
    let hour = time.getHours();
    let minute = time.getMinutes();
    let second = time.getSeconds();
    const setHourBox = document.querySelector('li:nth-child(1)').querySelectorAll('.afterTime');
    if (!setHourBox[0].innerHTML || setHourBox[0].innerHTML != formatTime(hour)) {
      if (setHourBox[0].innerHTML) rotateUp(document.querySelector('li:nth-child(1)').querySelectorAll('.beforeTime')[1], formatTime(hour), 1);
      setHourBox.forEach(ele => ele.innerHTML = formatTime(hour));
    }
    const setMinuteBox = document.querySelector('li:nth-child(3)').querySelectorAll('.afterTime');
    if (!setMinuteBox[0].innerHTML || setMinuteBox[0].innerHTML != formatTime(minute)) {
      if (setMinuteBox[0].innerHTML) rotateUp(document.querySelector('li:nth-child(3)').querySelectorAll('.beforeTime')[1], formatTime(minute), 3);
      setMinuteBox.forEach(ele => ele.innerHTML = formatTime(minute));
    }
    const setSecondBox = document.querySelector('li:nth-child(5)').querySelectorAll('.afterTime')
    setSecondBox.forEach(ele => ele.innerHTML = formatTime(second));
    rotateUp(document.querySelector('li:nth-child(5)').querySelectorAll('.beforeTime')[1], formatTime(second), 5)
    setTimeout(changeTime, 1000);
  }
  changeTime();
  /*************************倒计时********************************/
  let days = document.getElementById('days');
  let hours = document.getElementById('hours');
  let minutes = document.getElementById('minutes');
  let seconds = document.getElementById('seconds');
  let dd = document.getElementById('dd');
  let hh = document.getElementById('hh');
  let mm = document.getElementById('mm');
  let ss = document.getElementById('ss');
  let enDate = '05/1/2024 00:00:00';
  let x = setInterval(function () {
    let now = new Date(enDate).getTime();
    let countDown = new Date().getTime();
    let distance = now - countDown;
    let d = Math.floor(distance / (1000 * 60 * 60 * 24));
    let h = Math.floor(distance % (1000 * 60 * 60 * 24) / (1000 * 60 * 60));
    let m = Math.floor(distance % (1000 * 60 * 60) / (1000 * 60));
    let s = Math.floor(distance % (1000 * 60) / 1000);
    days.innerHTML = d;
    hours.innerHTML = h;
    minutes.innerHTML = m;
    seconds.innerHTML = s;
    dd.style.strokeDashoffset = 220 - (220 * d) / 365;
    hh.style.strokeDashoffset = 220 - (220 * h) / 24; // 24
    mm.style.strokeDashoffset = 220 - (220 * m) / 60; // 60
    ss.style.strokeDashoffset = 220 - (220 * s) / 60; // 60
  })
  /**************************备忘录********************************/
  var uptext = document.querySelector(".up-textarea");
  var addto = document.querySelector(".up-button");
  var text = document.querySelector("#oContent");
  /*************添加事件*****************/
  addto.onclick = function () {
    inserhtml(uptext.value, '');
    // 添加后清空输入框
    uptext.value = '';
    // 焦点放回输入框
    uptext.focus();
    savetodo();
  }
  /*************savetodo函数****************/
  var savetodo = function () {
    let todoarr = [];
    let todojs = {};
    var econtent = document.querySelectorAll('.content');
    for (let index = 0; index < econtent.length; index++) {
      todojs.name = econtent[index].innerHTML;
      todojs.finish = econtent[index].classList.contains('finish');
      todoarr.push(todojs);
      todojs = {};
    }
    save(todoarr);
  }
  var loadtodo = function () {
    let todoarr = load();
    for (let index = 0; index < todoarr.length; index++) {
      inserhtml(todoarr[index].name, todoarr[index].finish ? 'finish' : '');
    }
  }
  /**********************本地持久储存(localStorage)函数*****************************/
  var save = function (arr) {
    /**JSON.stringify(arr) 先将数组转换为字符串   
     *localStorage.todotext 然后将字符串保存到本地的todotext中*/
    localStorage.todotext = JSON.stringify(arr);
  }
  /**
   *读取函数,把todotext转成数组
   *然后返回数组*/
  var load = function (arr) {
    var arr = JSON.parse(localStorage.todotext);
    return arr;
  }
  /**********************finish样式函数*****************************/
  /**********************按钮点击事件*****************************/
  text.onclick = function () {
    var tg = event.target;
    // 获取父元素下的所有子元素
    var tgkids = tg.parentElement.children;
    /*******************************对复选框的点击事件******************************/
    if (tgkids[0].checked) {
      tgkids[1].classList.add("finish");
    }
    else {
      tgkids[1].classList.remove("finish");
    }
    // 保存更改的样式
    savetodo();
    /*******************************对选择的进行删除********************************************/
    var Select = document.getElementById("up-button1");
    Select.onclick = function () {
      if (confirm("是否删除所选?")) {
        var check = document.getElementsByName("checkbox");
        for (var i = 0; i < check.length; i++) {
          if (check[i].checked) {
            check[i].parentElement.remove();
            i--;
            // 删除后保存
            savetodo();
          }
        }
      }
    }
  }
  var inserhtml = function (val, cls) {
    text.insertAdjacentHTML("beforeend",
      `<div>
            <input type="checkbox" name='checkbox'>               
            <span class='content ${cls}'>${val}</span>   
       </div>`
    )
  }
  loadtodo();
  /********************文本操作框*****************************************/
  // 1. 获取元素
  var login = document.querySelector('.login');
  var mask = document.querySelector('#oContent');
  // 2. 点击弹出层这个链接link,让mask和login显示出来
  link.addEventListener('click', function () {
    mask.style.display = 'block';
    login.style.display = 'block';
  });
  // 3. 点击closeBtn就隐藏mask和login
  closeBtn.addEventListener('click', function () {
    // mask.style.display = 'none';
    login.style.display = 'none';
  });
  // 4. 开始拖拽
  //(1)当我们鼠标按下,就获得鼠标在盒子内的坐标
  title.addEventListener('mousedown', function (e) {
    var x = e.pageX - login.offsetLeft;
    var y = e.pageY - login.offsetTop;
    //(2)鼠标移动的时候,把鼠标在页面中的坐标,减去鼠标在盒子内的坐标就是模态框的left和top值
    document.addEventListener('mousemove', move);
    function move(e) {
      login.style.left = e.pageX - x + 'px';
      login.style.top = e.pageY - y + 'px';
    }
    //(3)鼠标弹起,就让鼠标移动事件移除
    document.addEventListener('mouseup', function () {
      document.removeEventListener('mousemove', move);
    });
  });
  /*****************************提示弹窗无需点击的函数**********************************************/
  function displayAlert(type, data, time) {
    var prompt = document.createElement("div");
    if (type == "success") {
      prompt.style.width = "200px";
      prompt.style.backgroundColor = "#009900";
    } else if (type == "error") {
      prompt.style.width = "280px";
      prompt.style.backgroundColor = "#990000";
    } else if (type == "info") {
      prompt.style.backgroundColor = " #e6b800";
      prompt.style.width = "600px";
    } else {
      return;
    }
    prompt.id = "prompt";
    prompt.style.textAlign = "center";
    prompt.style.position = "absolute";
    prompt.style.height = "60px";
    prompt.style.marginLeft = "-100px";
    prompt.style.marginTop = "-30px";
    prompt.style.left = "30%";
    prompt.style.top = "5%";
    prompt.style.color = "white";
    prompt.style.fontSize = "25px";
    prompt.style.borderRadius = "20px";
    prompt.style.textAlign = "center";
    prompt.style.lineHeight = "60px";
    if (document.getElementById("") == null) {
      document.body.appendChild(prompt);
      prompt.innerHTML = data;
      setTimeout(function () {
        document.body.removeChild(prompt);
      }, time);
    }
  }
  /**************************打开URL按钮的JavaScript******************************************/
  // 获取打开URL按钮元素
  var openBtn = document.getElementById("openButton");
  // 添加点击事件处理程序
  openBtn.addEventListener('click', function () {
    // 获取文件路径
    // 这里假设您已经有一个函数来获取文件路径,例如 prompt('请输入文件路径', 'D:/前端学习', '_blank');
    var filePath = prompt("请输入网站地址或者本地文件路径", "D:/备忘录信息");
    if (filePath) {
      // 使用window.location对象的assign()方法导航到指定文件
      // window.location.assign(filePath);
      // 或者使用window.open()方法打开新窗口导航到指定文件
      window.open(filePath);
    } else {
      displayAlert('info', '未提供有效的文件路径!', 1500);
      // alert("未提供有效的文件路径!");
    }
  });
  /**************************本地文件读取的函数******************************************/
  /**************************复制文本******************************************/
  var oContent = document.getElementById('oContent');
  oContent.ondragend = function () {
    document.execCommand("Copy");
    // alert("复制成功")
    displayAlert('error', '复制成功!', 1500);
  };
</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构记录

之前记录的数据结构笔记&#xff0c;不过图片显示不了了 数据结构与算法(C版) 1、绪论 1.1、数据结构的研究内容 一般应用步骤&#xff1a;分析问题&#xff0c;提取操作对象&#xff0c;分析操作对象之间的关系&#xff0c;建立数学模型。 1.2、基本概念和术语 数据&…

glm2大语言模型服务环境搭建

一、模型介绍 ChatGLM2-6B 是开源中英双语对话模型 ChatGLM-6B 的第二代版本&#xff0c;在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础之上&#xff0c;ChatGLM2-6B 引入了如下新特性&#xff1a; 更强大的性能&#xff1a;基于 ChatGLM 初代模型的开发经验&…

大数据实验三-HBase编程实践

目录 一&#xff0e;实验内容 二&#xff0e;实验目的 三&#xff0e;实验过程截图及说明 1、安装HBase 2、配置伪分布式模式&#xff1a; 3、使用hbase的shell命令来操作表&#xff1a; 4、使用hbase提供的javaAPI来编程实现类似操作&#xff1a; 5、实验总结及心得体会…

『VUE』10. 事件修饰符(详细图文注释)

目录 什么是事件修饰符?vuejs 不使用修饰符 原生js实现禁用事件对象的默认事件使用事件修饰符 .prevent使用事件修饰符 .stop使用事件修饰符 .self 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 什么是事件修饰符? vue 在 Vu…

『51单片机』蜂鸣器

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

【研发日记】白话解读UDS协议(一)——19 04读取快照服务

文章目录 前言 19服务 04子服务 19 04协议 快照存储设计 快照发送设计 功能验证 分析和应用 总结 前言 近期在一个嵌入式软件开发项目中&#xff0c;要按照UDS标准开发相关功能&#xff0c;期间在翻阅UDS标准时&#xff0c;周围同事都说很多地方晦涩难懂。所以利用晚上…

ObjectiveC-08-OOP面向对象程序设计-类的分离与组合

本节用一简短的文章来说下是ObjectiveC中的类。类其实是OOP中的一个概念&#xff0c;概念上简单来讲类是它是一组关系密切属性的集合&#xff0c;所谓的关系就是对现实事物的抽象。 上面提到的关系包括很多种&#xff0c;比如has a&#xff0c; is a&#xff0c;has some等&…

基于Java,SSM,html,Vue在线视频播放管理系统网站设计

摘要 基于Java, SSM, HTML, Vue的在线视频播放管理系统网站设计是一个利用Spring框架、SpringMVC、MyBatis&#xff08;SSM&#xff09;和前端技术HTML与Vue.js实现的多功能Web应用。这个系统旨在为用户提供一个便捷、高效的平台来上传、管理和观看视频内容&#xff0c;同时兼…

Spring与SpringBoot的区别

Spring是一个开源的Java应用程序框架&#xff0c;旨在简化企业级Java应用程序的开发。它提供了一个轻量级的容器&#xff0c;用于管理应用程序中的各个组件&#xff08;如依赖注入、AOP等&#xff09;&#xff0c;并提供了丰富的功能和模块&#xff0c;用于处理数据库访问、事务…

enqueue:oracle锁机制

实现锁的方式就是排队咯&#xff0c;那么排队就是有enqueue这么个结构来管理 管理锁的结构叫队列&#xff0c;即enqueue 所有和enqueue相关的函数都叫KSQ-- kernal service enqueue lock是从应用层面看到的锁&#xff0c;enqueue是oracle内部管理锁的一个结构。 可以用v$lock_…

ajax教程

文章目录 一、原生ajax1、AJAX 简介2、特点1&#xff09;优点2&#xff09;缺点 二、http协议1、概念2、Cookie和Session机制1&#xff09;Cookie2&#xff09;Session3&#xff09;报文 二、请求头1、概念2、常见请求头&#xff1a;3、Content-Type 三、AJAX使用1、详细操作2、…

vue快速入门(三)差值表达式

注释很详细&#xff0c;直接上代码 上一篇 新增内容 插值表达式基本用法插值表达式常用公式 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

显示器and拓展坞PD底层协商

简介&#xff1a; PD显示器或者PD拓展坞方案中&#xff0c;连接显示设备的Type-C端口主要运行在DRP模式&#xff0c;在此模式下可以兼容Source&#xff08;显卡&#xff09;、Sink&#xff08;信号器&#xff09;、DRP&#xff08;手机、电脑&#xff09;模式的显示设备。 Sou…

维基百科:8个提升维基百科推广效果的优化技巧-华媒舍

维基百科是全球最大的在线百科全书&#xff0c;致力于向用户提供高质量、可靠的知识内容。想要让自己的文章在维基百科中获得更多的曝光度和推广效果&#xff0c;并非易事。为此&#xff0c;我们整理了以下8个提升维基百科推广效果的优化技巧。 1. 确保内容符合要求 维基百科对…

Quiet-STaR:让语言模型在“说话”前思考

大型语言模型(llm)已经变得越来越复杂&#xff0c;能够根据各种提示和问题生成人类质量的文本。但是他们的推理能力让仍然是个问题&#xff0c;与人类不同LLM经常在推理中涉及的隐含步骤中挣扎&#xff0c;这回导致输出可能在事实上不正确或缺乏逻辑。 考虑以下场景:正在阅读一…

windows下安装iteliij Idea2023.3

首先从官网下载 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 双击打开进行安装&#xff1a; 安装完成后&#xff0c;需要对Idea进行稍微处理下。使用我分享给大家的文件&#xff0c;操作以下步骤&#xff1a; 注意&#xff1a;不能打开IDEA软件。 进入到scripts中点击un…

Spring Cloud微服务入门(一)

微服务的演变过程 //controller 视图交互层 前端数据处理传给service //1.DAO RequestBody userDAO String id;String type; {"id":"lcs", "type":"lcs"} //2.GET请求 findUserById&#xff1f;id1&typelcsRequestParam String …

css3之3D转换transform

css3之3D转换 一.特点二.坐标系三.3D移动&#xff08;translate3d)1.概念2.透视&#xff08;perpective)(近大远小&#xff09;&#xff08;写在父盒子上&#xff09; 四.3D旋转&#xff08;rotate3d)1.概念2.左手准则3.呈现&#xff08;transfrom-style)&#xff08;写父级盒子…

Python脚本:给TXT文件中的地铁站名添加引号

Python脚本&#xff1a;给TXT文件中的地铁站名添加引号 在日常的数据处理工作中&#xff0c;我们经常需要对文本数据进行格式化和处理。今天&#xff0c;我们就来分享一个使用Python脚本对TXT文件中的地铁站名进行处理的小技巧&#xff1a;将每行的地铁站名字加上双引号。 需求…

创新指南|贝恩的产品经理RAPID框架:解决问题的分步指南,使决策过程既高效又民主

您是否曾发现自己陷入项目的阵痛之中&#xff0c;决策混乱、角色不明确、团队成员之间的冲突不断升级&#xff1f;作为产品经理&#xff0c;驾驭这艘船穿过如此汹涌的水域可能是令人畏惧的。应对这些挑战的关键在于采用清晰、结构化的决策方法。输入贝恩的 RAPID 框架&#xff…