javascript - keydown 触发 <a> 的 css 变化,在新标签中打开一个链接,并回滚到 <a> 之前的 css 状态

标签 javascript jquery css

您好,我正在开发一个小型网站,一旦按下键盘上的某个键,就会依次发生以下三个事件 1)相应修改其css 2) 在新标签页中打开链接 3) 对应回滚到之前的css状态

这是CSS。

div.website a:link, div.website a:visited{
    background-color:#ffffff;
    display:block;
    position:relative;
    text-align:center;
    vertical-align:middle;
    text-decoration:none;
    line-height:45px;
    height:45px;
    font-size:14px;
    border-radius:2px;
    color:#474a4d;
    transition-property:background-color, color, font-size;
    transition-duration:0.2s;
    transition-timing-function:ease;
  }
  div.website a:hover{
    background-color:#2c3e50;
    color:#ffffff;
    font-size:24px;
  }

这是代码

$(document).bind("keydown", function(event){
      event.preventDefault();
      var k = event.which || event.keyCode;
      for(var i = 32; i < 91; i++){
        if (i == k){
          var obj = $("a.hotkey" + k);
          obj.animate({
            fontSize:"24px"
          },{
            duration:500,
            complete:function(){
              setTimeout(function(){
                window.open(obj.attr("href"));
              },500);
            }
          });
          obj.animate({
            fontSize:"14px"
          });
        }
      }
      return false;
    });

这是html代码

<div class="col-xs-4 col-lg-4 website">
  <a href="http://www.facebook.com" id="11" class="website hotkey66 hotkey32" target="_blank">
    <span>facebook</span>
  </a>
</div>

但是,当代码执行时(当我实际按下键时),似乎1)和3)是同时执行的,而不是顺序执行的,.css没有变化。然后我在Chrome中进行了 Debug模式,它证实了我的猜测。

另外,其实我想要的是悬停效果,后来改成只有font-size的变化。如果有人能告诉我如何模拟悬停效果和回滚,那就太感谢了。非常感谢!

最佳答案

这是一个镜头。不要使用 `jQuery.animate',只需使用您的 CSS 过渡。

在按键时,将“悬停”类添加到元素,然后在触发新页面时将其删除。还将“悬停”规则添加到 css。

$(document).bind("keydown", function(event){
  event.preventDefault();
  var k = event.which || event.keyCode;
  for(var i = 32; i < 91; i++){
    if (i == k){
      var obj = $("a.hotkey" + k);
      obj.addClass('hover')
      setTimeout(function(){
        window.open(obj.attr("href"));
        obj.removeClass('hover')
      },500);
    }
  }
  return false;
});
div.website a:link, div.website a:visited{
  background-color:#ffffff;
  display:block;
  position:relative;
  text-align:center;
  vertical-align:middle;
  text-decoration:none;
  line-height:45px;
  height:45px;
  font-size:14px;
  border-radius:2px;
  color:#474a4d;
  transition-property:background-color, color, font-size;
  transition-duration:0.2s;
  transition-timing-function:ease;
}
div.website a.hover,
div.website a:hover{
  background-color:#2c3e50;
  color:#ffffff;
  font-size:24px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-xs-4 col-lg-4 website">
  <a href="http://www.facebook.com" id="11" class="website hotkey66 hotkey32" target="_blank">
    <span>facebook</span>
  </a>
</div>

您会注意到 facebook 不会从 Stack 启动,但那是因为沙盒环境不允许弹出窗口。我在 Codepen 中尝试了同样的方法它似乎工作得很好。试一试,如果这就是您要找的,请告诉我。

关于javascript - keydown 触发 <a> 的 css 变化,在新标签中打开一个链接,并回滚到 <a> 之前的 css 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27699136/

相关文章:

html - 使用 CSS 的动态形状

javascript - window.frames.length 在 chrome 和 Firefox 浏览器中返回 0

javascript - ldapjs 身份验证(用户登录设置)

javascript - 理解延迟执行链的语法

javascript - Jquery Mobile 面板在页面更改时可见

Jquery/CSS – 将类添加到第一个 :p of multiple div with specified class

javascript - 如何将数据目标用于不同的组件?

javascript - jQuery Spritely 插件不适用于 jQuery + 1.11

html - 我怎样才能把表格放到木箱上? react 灵敏

html - 如何在从 Perl CGI 脚本发送的 HTML 电子邮件中包含 CSS 文件?