当前位置:首页 > 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结构示例:

js实现图片选中效果

<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。

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
});

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

相关文章

vue实现效果

vue实现效果

Vue 实现常见效果的方法 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现表单元素与数据的双向绑定。例如输入框与数据的实时同步: <input v-model=…

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标签…

h5实现左右滚动效果

h5实现左右滚动效果

使用CSS实现横向滚动 在HTML5中实现左右滚动效果,可以通过CSS的overflow-x属性配合white-space或flex布局实现。以下是一个基础示例: <div class="sc…

vue实现放大图片

vue实现放大图片

实现图片放大功能的方法 在Vue中实现图片放大功能,可以通过多种方式实现。以下是几种常见的方法: 使用CSS transform属性 通过CSS的transform: scale()属性实现图片放…

vue图片实现旋转

vue图片实现旋转

使用 CSS transform 实现图片旋转 在 Vue 中可以通过 CSS 的 transform 属性实现图片旋转效果。创建一个数据属性控制旋转角度,通过绑定样式动态更新。 <t…

react如何添加效果

react如何添加效果

React 添加动画效果的方法 使用 CSS 过渡动画 在 React 组件中直接通过 className 或 style 属性应用 CSS 过渡效果。定义 CSS 类包含 transition 属性…