当前位置:首页 > 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实现全屏

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

原生js实现轮播图

原生js实现轮播图

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

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似:…