当前位置:首页 > JavaScript

js实现toggleclass

2026-02-02 09:15:38JavaScript

实现toggleClass的基本方法

使用原生JavaScript实现toggleClass功能,可以通过操作DOM元素的classList属性完成。以下是一个基础实现:

function toggleClass(element, className) {
  element.classList.toggle(className);
}

调用方式:

const btn = document.getElementById('myButton');
toggleClass(btn, 'active');

支持多个类名的切换

如果需要同时切换多个类名,可以扩展函数功能:

function toggleClasses(element, ...classNames) {
  classNames.forEach(className => {
    element.classList.toggle(className);
  });
}

调用示例:

toggleClasses(btn, 'active', 'highlight', 'disabled');

带有回调函数的实现

某些场景下需要在切换类名后执行特定操作,可以添加回调参数:

js实现toggleclass

function toggleClassWithCallback(element, className, callback) {
  const hadClass = element.classList.contains(className);
  element.classList.toggle(className);
  if (callback) callback(!hadClass);
}

使用示例:

toggleClassWithCallback(btn, 'active', (isActive) => {
  console.log(isActive ? '已激活' : '已取消');
});

兼容旧浏览器的polyfill

对于需要支持IE9等旧浏览器的项目,可以添加classList的polyfill或使用className实现:

function toggleClassLegacy(element, className) {
  const current = element.className;
  const hasClass = current.indexOf(className) >= 0;

  if (hasClass) {
    element.className = current.replace(
      new RegExp('(\\s|^)' + className + '(\\s|$)', 'g'), ' '
    ).trim();
  } else {
    element.className += ' ' + className;
  }
}

jQuery风格的链式调用实现

如果需要模仿jQuery的链式调用模式,可以扩展Element原型:

js实现toggleclass

Element.prototype.toggleClass = function(...classNames) {
  classNames.forEach(className => {
    this.classList.toggle(className);
  });
  return this;
};

使用方式:

document.getElementById('myDiv')
  .toggleClass('active')
  .toggleClass('visible')
  .setAttribute('data-state', 'modified');

性能优化版本

对于需要频繁操作的场景,可以考虑以下优化方案:

const toggleClass = (function() {
  const classListProp = 'classList';
  const toggleFn = 'toggle';

  return function(element, className) {
    if (element[classListProp]) {
      element[classListProp][toggleFn](className);
    } else {
      let classes = element.className.split(' ');
      const index = classes.indexOf(className);

      if (index >= 0) {
        classes.splice(index, 1);
      } else {
        classes.push(className);
      }

      element.className = classes.join(' ');
    }
  };
})();

动画过渡支持

结合CSS过渡效果时,可以添加transition类:

function toggleClassWithTransition(element, className) {
  element.classList.add('transition');
  element.classList.toggle(className);

  element.addEventListener('transitionend', function handler() {
    element.classList.remove('transition');
    element.removeEventListener('transitionend', handler);
  });
}

对应的CSS:

.transition {
  transition: all 0.3s ease;
}

标签: jstoggleclass
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…