当前位置:首页 > JavaScript

js实现图片选中效果

2026-03-01 10:43:36JavaScript

实现图片选中效果的方法

使用CSS类切换实现选中效果

通过为图片添加点击事件监听器,动态切换CSS类来实现选中效果。选中时可以添加边框、阴影等样式。

document.querySelectorAll('.image-item').forEach(img => {
  img.addEventListener('click', function() {
    this.classList.toggle('selected');
  });
});

对应的CSS样式:

.selected {
  border: 3px solid #4285f4;
  box-shadow: 0 0 10px rgba(66, 133, 244, 0.5);
}

使用复选框实现多选

在每张图片上叠加一个复选框,通过控制复选框状态实现选中效果。

const checkboxes = document.querySelectorAll('.image-checkbox');
checkboxes.forEach(checkbox => {
  checkbox.addEventListener('change', function() {
    const img = this.closest('.image-container').querySelector('img');
    img.classList.toggle('selected', this.checked);
  });
});

HTML结构示例:

<div class="image-container">
  <input type="checkbox" class="image-checkbox">
  <img src="image.jpg" class="image-item">
</div>

使用Canvas绘制选中框

对于需要更复杂选中效果的情况,可以使用Canvas在图片上绘制选中框。

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const img = new Image();

img.onload = function() {
  canvas.width = img.width;
  canvas.height = img.height;
  ctx.drawImage(img, 0, 0);

  canvas.addEventListener('click', function(e) {
    const rect = canvas.getBoundingClientRect();
    const x = e.clientX - rect.left;
    const y = e.clientY - rect.top;

    // 清除之前的选择
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.drawImage(img, 0, 0);

    // 绘制新的选择框
    ctx.strokeStyle = '#FF0000';
    ctx.lineWidth = 2;
    ctx.strokeRect(x - 50, y - 50, 100, 100);
  });
};

img.src = 'image.jpg';

使用第三方库实现高级效果

对于更复杂的图片选择需求,可以考虑使用第三方库如Fabric.js或Interact.js。

Fabric.js示例:

const canvas = new fabric.Canvas('canvas');
fabric.Image.fromURL('image.jpg', function(img) {
  canvas.add(img);

  canvas.on('mouse:down', function(options) {
    if (options.target) {
      options.target.set({
        borderColor: 'red',
        cornerColor: 'green',
        cornerSize: 12,
        transparentCorners: false
      });
      canvas.renderAll();
    }
  });
});

响应式图片选择组件

创建一个可复用的图片选择组件,支持单选和多选模式。

class ImageSelector {
  constructor(containerId, options = {}) {
    this.container = document.getElementById(containerId);
    this.multiSelect = options.multiSelect || false;
    this.selectedImages = new Set();
    this.init();
  }

  init() {
    this.container.querySelectorAll('img').forEach(img => {
      img.addEventListener('click', () => this.toggleSelection(img));
    });
  }

  toggleSelection(img) {
    if (!this.multiSelect) {
      this.selectedImages.forEach(selected => {
        selected.classList.remove('selected');
      });
      this.selectedImages.clear();
    }

    img.classList.toggle('selected');
    if (img.classList.contains('selected')) {
      this.selectedImages.add(img);
    } else {
      this.selectedImages.delete(img);
    }
  }

  getSelected() {
    return Array.from(this.selectedImages);
  }
}

使用示例:

const selector = new ImageSelector('gallery-container', {
  multiSelect: true
});

js实现图片选中效果

标签: 效果图片
分享给朋友:

相关文章

vue2实现图片懒加载

vue2实现图片懒加载

实现图片懒加载的方法 在Vue2中实现图片懒加载可以通过以下方法完成,核心原理是监听图片是否进入可视区域,再动态加载图片资源。 使用IntersectionObserver API Interse…

vue实现效果展示

vue实现效果展示

Vue 实现效果展示的方法 Vue.js 提供了多种方式来实现动态效果展示,以下是一些常见的方法: 使用 Vue 的过渡和动画系统 Vue 内置了 <transition> 和 <…

vue实现突出效果

vue实现突出效果

Vue 实现突出效果的方法 在 Vue 中实现突出效果通常涉及动态样式绑定、动画过渡或第三方库的使用。以下是几种常见实现方式: 动态类名绑定 通过 v-bind:class 或简写 :class 实…

vue实现图片编辑

vue实现图片编辑

Vue实现图片编辑的方法 使用第三方库vue-cropper 安装vue-cropper库: npm install vue-cropperjs 在Vue组件中使用: <template…

react如何引入图片

react如何引入图片

在React中引入图片的方法 使用import直接引入 将图片文件放在项目src目录下(如src/images),通过ES6的import语法引入: import logo from './ima…

vue实现凤凰效果

vue实现凤凰效果

Vue 实现凤凰效果 凤凰效果通常指一种视觉动画,模拟凤凰展翅、火焰燃烧等动态效果。在 Vue 中实现这种效果,可以结合 CSS 动画、Canvas 或第三方动画库(如 GSAP)。以下是几种实现方式…