基于CSS和VUE的蚂蚁行军效果的框选框

效果图:

屏幕录制2022-04-27 16.44.05

<template>
  <div class="texts">
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <div class="box"></div>
  </div>
</template>

<script>
export default {
  mounted() {
    let texts = document.querySelector(".texts");
    let that = this;
    texts.addEventListener("mousedown", function (event) {
      let scrollLeft = this.scrollLeft;
      let scrollTop = this.scrollTop;
      let box = document.querySelector(".box");
      box.style.position = "absolute";
      box.style.left = scrollLeft + event.clientX + "px";
      box.style.top = scrollTop + event.clientY + "px";
      box.style.width = 0;
      box.style.height = 0;

      texts.addEventListener("mousemove", that.fn);
    });
    texts.addEventListener("mouseup", function () {
      texts.removeEventListener("mousemove", that.fn);
    });
  },
  methods: {
    fn(event) {
      let texts = document.querySelector(".texts");
      let scrollLeft = texts.scrollLeft;
      let scrollTop = texts.scrollTop;
      let box = document.querySelector(".box");
      box.style.width =
        event.clientX +
        scrollLeft -
        Number(getComputedStyle(box).left.slice(0, -2)) +
        "px";
      box.style.height =
        event.clientY +
        scrollTop -
        Number(getComputedStyle(box).top.slice(0, -2)) +
        "px";
    },
  },
};
</script>

<style>
@keyframes ants {
  0% {
    border-image: 1 repeating-linear-gradient(-45deg, black 0 1em, white 0 2em);
  }
  12.5% {
    border-image: 1
      repeating-linear-gradient(
        -45deg,
        white 0 0.25em,
        black 0.25em 1.25em,
        white 1.25em 2em
      );
  }
  25% {
    border-image: 1
      repeating-linear-gradient(
        -45deg,
        white 0 0.5em,
        black 0.5em 1.5em,
        white 1.5em 2em
      );
  }
  37.5% {
    border-image: 1
      repeating-linear-gradient(
        -45deg,
        white 0 0.75em,
        black 0.75em 1.75em,
        white 1.75em 2em
      );
  }
  50% {
    border-image: 1 repeating-linear-gradient(-45deg, white 0 1em, black 0 2em);
  }
  62.5% {
    border-image: 1
      repeating-linear-gradient(
        -45deg,
        black 0 0.25em,
        white 0.25em 1.25em,
        black 1.25em 2em
      );
  }
  75% {
    border-image: 1
      repeating-linear-gradient(
        -45deg,
        black 0 0.5em,
        white 0.5em 1.5em,
        black 1.5em 2em
      );
  }
  87.5% {
    border-image: 1
      repeating-linear-gradient(
        -45deg,
        black 0 0.75em,
        white 0.75em 1.75em,
        black 1.75em 2em
      );
  }
  100% {
    border-image: 1 repeating-linear-gradient(-45deg, black 0 1em, white 0 2em);
  }
}

.texts {
  position: relative;
  width: 100%;
  height: 100%;
  font-size: 16px;
  background: #eee;
  background-image: linear-gradient(45deg, #bbb 25%, transparent 0),
    linear-gradient(45deg, transparent 75%, #bbb 75%);
  background-size: 30px 30px, 30px 30px;
  background-position: 0 0, -15px -15px;
  overflow: scroll;
}
.box {
  position: absolute;
  left: -1000px;
  top: -1000px;
  font-family: "Times New Roman", Times, serif;
  border: 1px solid transparent;
  padding: 1px;
  border-image: 1 repeating-linear-gradient(-45deg, black 0 1em, white 0 2em);
  animation: ants 0.5s linear infinite;
}
p {
  width: 100px;
  height: 200px;
}
</style>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易山易酒易诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值