html+css+javascript实现跟随鼠标移动显示选中效果

yizhihongxing

下面是 “html+css+javascript实现跟随鼠标移动显示选中效果”的完整攻略:

1. 前置知识

在开始实现之前,需要具备以下基础知识:

  • HTML:了解HTML基本结构和标签用途;
  • CSS:了解CSS基本布局和属性定义;
  • JavaScript:掌握JavaScript基本语法和DOM操作。

2. 实现步骤

2.1 HTML

首先,需要通过HTML创建网页结构。在<body>标签中添加相应元素,用于实现跟随鼠标移动显示选中效果,例如:

<div class="container">
  <div class="box"></div>
</div>

这里我们设定一个名为container的盒子,内部有名为box的盒子。

2.2 CSS

接下来,需要通过CSS定义样式。为了实现选中效果,我们可以通过伪元素:before:after来实现。例如:

.container {
  position: relative;
  height: 200px;
}

.box {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 100px;
  height: 100px;
  background-color: #ccc;
}

.box:before {
  content: '';
  position: absolute;
  top: -5px;
  left: -5px;
  right: -5px;
  bottom: -5px;
  border: 1px solid #f00;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease;
}

.box:after {
  content: '';
  position: absolute;
  top: -10px;
  left: -10px;
  right: -10px;
  bottom: -10px;
  border: 1px solid #f00;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s ease;
}

.box相对应的是.box:before.box:after元素,他们利用伪元素的特性作为小框选区。.box:before.box:after由于内容区不存在,会默认引入外框的CSS属性继承关系。在这里,我们定义了它们的颜色、大小和透明度属性。

2.3 JavaScript

最后,需要在JavaScript中实现鼠标跟随效果和选中效果。要实现鼠标跟随效果,可以通过mousemove事件获取当前鼠标的位置,然后通过offset()方法和topleft属性设置选中框的位置,例如:

$('.container').mousemove(function(e) {
  var x = e.pageX - $(this).offset().left;
  var y = e.pageY - $(this).offset().top;
  $('.box:before').css({
    'left': x + 'px',
    'top': y + 'px'
  });
  $('.box:after').css({
    'left': x + 'px',
    'top': y + 'px'
  });
});

以上代码监听.container盒子的mousemove事件,获取当前的鼠标位置,并且将选中框的位置设置为鼠标位置。这里选择使用jQuery库,也可以使用ES6新增的let、const、箭头函数等特性,注意使用原生JavaScript的时候,需要单独写出不同浏览器的兼容代码。

最后,为了实现选中效果,可以在选中框的上层添加click事件,通过.toggleClass()方法添加一个类名实现选中效果。例如:

$('.box').click(function() {
  $(this).toggleClass('active');
  $('.box:before, .box:after').toggleClass('active');
});

这里监听.box元素的click事件,利用.toggleClass()方法,向.box.box:before.box:after添加active类名,从而实现选中效果。

3. 示例说明

示例1

下面是一个简洁的实现:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>示例1</title>
  <style type="text/css">
    .container {
      position: relative;
      height: 200px;
    }
    .box {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      width: 100px;
      height: 100px;
      background-color: #ccc;
    }
    .box:before {
      content: '';
      position: absolute;
      top: -5px;
      left: -5px;
      right: -5px;
      bottom: -5px;
      border: 1px solid #f00;
      opacity: 0;
      pointer-events: none;
      transition: opacity 0.3s ease;
    }
    .box:after {
      content: '';
      position: absolute;
      top: -10px;
      left: -10px;
      right: -10px;
      bottom: -10px;
      border: 1px solid #f00;
      opacity: 0;
      pointer-events: none;
      transition: opacity 0.3s ease;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="box"></div>
  </div>
  <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script type="text/javascript">
    $('.container').mousemove(function(e) {
      var x = e.pageX - $(this).offset().left;
      var y = e.pageY - $(this).offset().top;
      $('.box:before').css({
        'left': x + 'px',
        'top': y + 'px'
      });
      $('.box:after').css({
        'left': x + 'px',
        'top': y + 'px'
      });
    });

    $('.box').click(function() {
      $(this).toggleClass('active');
      $('.box:before, .box:after').toggleClass('active');
    });
  </script>
</body>
</html>

在这个示例中,通过style标签定义了CSS样式,并通过.container.box两个<div>标签来实现跟随鼠标移动显示选中框的效果。初始状态,选中框是不可见的。当鼠标在容器内移动时,选中框会出现并跟随鼠标移动。当鼠标在选中框上点击时,选中框会有一个边框变化。

示例2

下面是一个更加详细的实现,包括了兼容代码和CSS兼容所有浏览器:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>示例2</title>
  <style type="text/css">
    .container {
      position: relative;
      height: 200px;
    }
    .box {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      width: 100px;
      height: 100px;
      background-color: #ccc;
    }
    .box:before {
      content: '';
      position: absolute;
      top: -5px;
      left: -5px;
      right: -5px;
      bottom: -5px;
      border: 1px solid #f00;
      opacity: 0;
      pointer-events: none;
      transition: opacity 0.3s ease;
    }
    .box:after {
      content: '';
      position: absolute;
      top: -10px;
      left: -10px;
      right: -10px;
      bottom: -10px;
      border: 1px solid #f00;
      opacity: 0;
      pointer-events: none;
      transition: opacity 0.3s ease;
    }
    .active:before {
      opacity: 1;
    }
    .active:after {
      opacity: 1;
    }
  </style>
</head>
<body>
  <div class="container">
    <div class="box"></div>
  </div>
  <script type="text/javascript">
    function getOffset(el) {
      var x = 0;
      var y = 0;

      while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
        x += el.offsetLeft - el.scrollLeft;
        y += el.offsetTop - el.scrollTop;
        el = el.offsetParent;
      }

      return { left: x, top: y };
    }

    function onmousemove(e) {
      var x = e.pageX - getOffset(this).left;
      var y = e.pageY - getOffset(this).top;
      this.getElementsByClassName('box')[0].getElementsByClassName('box-before')[0].style.left = x + 'px';
      this.getElementsByClassName('box')[0].getElementsByClassName('box-before')[0].style.top = y + 'px';
      this.getElementsByClassName('box')[0].getElementsByClassName('box-after')[0].style.left = x + 'px';
      this.getElementsByClassName('box')[0].getElementsByClassName('box-after')[0].style.top = y + 'px';
    }

    function onclick() {
      var box = this.getElementsByClassName('box')[0];
      box.classList.toggle('active');
      box.getElementsByClassName('box-before')[0].classList.toggle('active');
      box.getElementsByClassName('box-after')[0].classList.toggle('active');
    }

    var container = document.getElementsByClassName('container')[0];
    container.onmousemove = onmousemove;
    container.onclick = onclick;
  </script>
</body>
</html>

在这个示例中,同样通过style标签定义了CSS样式,与示例1一样定义了选中框的样式。在JavaScript中,定义了getOffset()函数,用于获取元素的相对位置,在移动鼠标的时候根据这个位置计算选中框的位置。在JavaScript中,我们没有使用jQuery,而是直接使用原生JavaScript编写代码,需要注意兼容不同浏览器。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:html+css+javascript实现跟随鼠标移动显示选中效果 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JavaScript CSS 通用循环滚动条

    我来详细讲解一下如何实现“JavaScript CSS 通用循环滚动条”的完整攻略。 首先,我们需要明确一下实现过程的步骤: HTML 结构 CSS 样式 JavaScript 实现滚动效果 接下来我们一步一步来实现。 HTML 结构 先看一下网页结构,我们需要在 HTML 中添加一个容器(外框)和一个实现内容滚动效果的滚动条。 容器(外框)的结构如下: &…

    css 2023年6月10日
    00
  • 分享bootstrap学习笔记心得(组件及其属性)

    分享bootstrap学习笔记心得(组件及其属性) 1. 什么是bootstrap Bootstrap是Twitter公司开发的一个前端框架,它基于HTML、CSS、JavaScript,通过预设的样式,可以使前端页面快速搭建和美化。现在已经成为全球最受欢迎的前端框架之一。 2. 常用组件及其属性 2.1 导航栏(Navbar) Navgation Bar(…

    css 2023年6月11日
    00
  • css background 背景图的设置方法

    下面是关于CSS背景图设置方法的攻略: 1. 使用background-image属性 在CSS中,我们可以使用background-image属性来设置背景图片。这个属性可以接收一个URL值,用于指定背景图片的路径。下面是一个例子: body { background-image: url("path/to/image.jpg"); }…

    css 2023年6月9日
    00
  • SpringBoot2.x 集成 Thymeleaf的详细教程

    SpringBoot2.x 集成 Thymeleaf的详细教程 Thymeleaf是一个Java的模板引擎,能够在客户端和服务端运行。它被广泛应用于Spring框架的Web开发。下面我们将介绍SpringBoot2.x集成Thymeleaf的详细教程。 步骤一:添加Starter依赖 在 pom.xml 文件中添加以下依赖: <dependency&g…

    css 2023年6月9日
    00
  • 深入理解Vue的过度与动画

    下面是关于“深入理解Vue的过渡与动画”的完整攻略,包括以下内容: 1. 什么是过度与动画 Vue 中的过渡(transition)是在元素的 插入、更新 和 移除 时自动添加类名来实现过渡效果,例如淡入淡出、展开和折叠等。它利用了 CSS3 的几个属性。而动画(animation)是动态效果的实现方式,可以让元素在一段时间内完成多个关键帧,类似于 Flas…

    css 2023年6月10日
    00
  • JS中 querySelector 与 getElementById 方法区别

    下面我来详细讲解一下JS中querySelector和getElementById方法的区别: 1. getElementById getElementById是DOM提供的方法之一,它返回的是与指定id属性值匹配的元素,如果没有匹配的元素,则返回null。它的语法如下: var elem = document.getElementById(id); 注意,…

    css 2023年6月9日
    00
  • CSS简写小集

    CSS简写小集攻略 简介 CSS简写指的是使用一行代码就能够完成多个 CSS 属性赋值的方式。它能够大幅度缩短 CSS 代码量,增加代码可读性和优雅度。 语法 通用语法格式如下: selector { property1: value1; [property2: value2;] [property3: value3;] […] } 使用 CSS 简写格…

    css 2023年6月10日
    00
  • 纯 CSS3实现的霓虹灯特效

    让我详细讲解如何使用纯 CSS3 实现霓虹灯特效。 1. 霓虹灯简介 霓虹灯本身是一种广告灯箱,通过气体放电和荧光发光,呈现出明亮、绚丽的光效,在近年来也逐渐成为了 web 设计中常用的一种特效,给网页带来了别样的视觉体验。 2. 过程 2.1 HTML 结构 我们首先需要确定 HTML 结构,在 body 中加入一个 div,设置宽度、高度、背景色、边框等…

    css 2023年6月9日
    00
合作推广
合作推广
分享本页
返回顶部