You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Tampermonkey注入脚本内的按钮添加:hover与:active状态效果

如何为Tampermonkey注入脚本内的按钮添加:hover与:active状态效果

嗨,我来帮你搞定这个问题~ 你现在遇到的核心卡点是:CSS伪类(像:hover、:active这类)没法通过元素的style行内属性直接设置,必须用CSS选择器规则来定义才行。结合你用Tampermonkey写脚本的场景,我给你推荐两种最实用的解决方案,完全贴合你的代码逻辑来改:


方法一:用Tampermonkey专属的GM_addStyle定义样式(推荐)

Tampermonkey自带了GM_addStyle这个API,专门用来给脚本注入独立的CSS样式,不会污染页面其他元素,非常适配咱们的场景。

步骤1:先在脚本开头定义按钮的样式规则(包含伪类效果)

把这段代码加在你脚本的最开头(循环创建按钮的代码之前):

// 注入按钮的基础样式与伪类交互效果
GM_addStyle(`
.diep-lobby-btn {
  padding: 5px;
  border: 1px solid black;
  cursor: pointer; /* 鼠标移上去显示手型,提升交互体验 */
  transition: all 0.2s ease; /* 加个平滑过渡,状态切换不生硬 */
}

.diep-lobby-btn:hover {
  filter: brightness(1.1); /* hover时轻微提亮背景 */
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); /* 加阴影增强层次感 */
}

.diep-lobby-btn:active {
  filter: brightness(0.9); /* 按下时轻微变暗,模拟按压质感 */
  transform: translateY(1px); /* 按下时向下位移1px,更有真实感 */
}
`);

步骤2:修改按钮创建代码,给按钮绑定自定义类名

把你原来设置行内padding、border的代码删掉,换成给按钮添加我们定义好的类名,同时保留动态背景色的设置(因为每个按钮的背景色可能不一样):

for (let region of data) {
  for (let lobby of region.lobbies) {
    let button = document.createElement('button');
    button.textContent = `${region.region} ${lobby.gamemode} ${lobby.numPlayers}p`;
    button.addEventListener('click', () => {
      window.open(`https://diep.io/?ip=${lobby.ip}&g=${lobby.gamemode}&l=0x0`)
    });
    
    // 关键:给按钮加自定义类名,应用我们写好的样式规则
    button.classList.add('diep-lobby-btn');
    // 保留动态背景色的行内设置(这部分是每个按钮独有的)
    button.style.backgroundColor = colors[region.region] || "rgba(255, 255, 255, 0.5)";
    
    buttons.appendChild(button);
  }
  let br = document.createElement('br');
  buttons.appendChild(br);
}

方法二:动态创建style元素插入页面(通用方案,不依赖Tampermonkey API)

如果你不想用Tampermonkey的专属API,也可以手动创建一个style元素插入到页面的head里,效果完全一致:

// 动态创建style元素并插入页面
const styleEl = document.createElement('style');
styleEl.textContent = `
.diep-lobby-btn {
  padding: 5px;
  border: 1px solid black;
  cursor: pointer;
  transition: all 0.2s ease;
}

.diep-lobby-btn:hover {
  filter: brightness(1.1);
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}

.diep-lobby-btn:active {
  filter: brightness(0.9);
  transform: translateY(1px);
}
`;
document.head.appendChild(styleEl);

之后的按钮创建逻辑和方法一的第二步完全一样,给按钮加diep-lobby-btn类名即可。


额外小提示

你可以根据自己的喜好随意调整伪类里的样式:比如把filter: brightness()换成直接修改background-color,或者给:active加个边框粗细变化,怎么好看怎么来~ 另外加个transition过渡动画,能让状态切换更丝滑,不会显得突兀。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 11:24:31