Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用jQuery在输入上重新创建CSS悬停动画,使其在Edge中工作_Jquery_Html_Css_Microsoft Edge_Jquery Hover - Fatal编程技术网

如何使用jQuery在输入上重新创建CSS悬停动画,使其在Edge中工作

如何使用jQuery在输入上重新创建CSS悬停动画,使其在Edge中工作,jquery,html,css,microsoft-edge,jquery-hover,Jquery,Html,Css,Microsoft Edge,Jquery Hover,我有六到九个开关排成一行。每个开关都在悬停时设置动画:旋钮向下滑动,旋钮和轨迹都以纯色或渐变填充。在“边”中,悬停动画不会激发 我对jQuery理解不够,不知道从哪里开始使用jQuery而不是CSS重新创建动画,这样它就可以在Edge中工作 我不知道我需要在CSS代码中留下什么,或者我应该转移到jQuery 我知道问题是Edge除了链接之外不喜欢任何东西,至少我是这么被告知的 如何使用jQuery而不是CSS来实现这一点 我看过其他人的问题和他们收到的答案,但他们都处理图像或链接或简单的东西,而

我有六到九个开关排成一行。每个开关都在悬停时设置动画:旋钮向下滑动,旋钮和轨迹都以纯色或渐变填充。在“边”中,悬停动画不会激发

我对jQuery理解不够,不知道从哪里开始使用jQuery而不是CSS重新创建动画,这样它就可以在Edge中工作

我不知道我需要在CSS代码中留下什么,或者我应该转移到jQuery

我知道问题是Edge除了链接之外不喜欢任何东西,至少我是这么被告知的

如何使用jQuery而不是CSS来实现这一点

我看过其他人的问题和他们收到的答案,但他们都处理图像或链接或简单的东西,而不是输入。我已经准备了一个带有一些注释的代码笔:

HTML:

<!DOCTYPE html>
    <html>
    <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 
   </script>
    </head>
    <body>
      <div class="switch-row">
       <label class="switch">
         <a href="https://www.linkedin.com/" target="_blank" rel="noopener noreferrer">
           <input class="knob" type="checkbox">
           <span class="slider round"></span>
         </a>
         </label>
      </div>
      <div class="switch-row">
       <label class="switch">
          <a href="https://www.twitter.com/" target="_blank" rel="noopener noreferrer">
            <input class="knob" type="checkbox">
           <span class="slider round"></span>
         </a>
       </label>
      </div>
    </body>
    </html>
我正在使用jQuery作为指导,看看我是否能够解决这个问题,但我不明白。我是从以下地方借来的:


我希望这些开关能像CSS中的开关一样工作,但使用jQuery代替。我希望旋钮向下滑动并填充渐变,轨迹在悬停/鼠标输入时填充纯色,在鼠标输出时还原。

IE可能看不到您的输入大小减小到0。 试试这个方法

.开关{ 显示:内联块; 高度:113px; 利润率:10px 23px; 位置:相对位置; 宽度:55px; 溢出:隐藏; } .开关输入{ 位置:绝对位置; 排名:0; 左:0; 身高:100%; 宽度:100%; 不透明度:0.001; z指数:1 } .滑块{ 边框:1px实心cc80ff; 底部:0; 光标:指针; 左:0; 位置:绝对位置; 右:0; 排名:0; -moz跃迁:0.4s; -o过渡:0.4s; -webkit转换:0.4s; 过渡:0.4s; } .滑块::之前{ 边框:1px实心cc80ff; 底部:60px; 内容:; 高度:43px; 左:5px; 位置:绝对位置; -moz跃迁:0.4s; -o过渡:0.4s; -webkit转换:0.4s; 过渡:0.4s; 宽度:43px; } 输入:悬停+滑块{ 背景色:cc80ff; 背景色:rgba204、128、255、0.8; } 输入:焦点+.滑块{ 盒影:0 1px cc80ff; } 输入:悬停+.滑块::之前{ 背景图像:-moz线性渐变右下角,cc80ff,e4d8cb,cc80ff; 背景图像:-ms线性渐变右下角,cc80ff,e4d8cb,cc80ff; 背景图像:-o-线性梯度右下角,cc80ff,e4d8cb,cc80ff; 背景图像:-webkit线性渐变右下角,cc80ff,e4d8cb,cc80ff; 背景图像:右下角线性渐变,cc80ff,e4d8cb,cc80ff; -moz变换:translateY54px; -ms变换:translateY54px; -o变换:translateY54px; -webkit转换:translateY54px; 转换:translateY54px; } /*---圆形滑块--*/ .圆滑{ 边界半径:34px; } .slider.round::before{ 边界半径:50%; } ​
谢谢,@G-cyr。这种方法可以在边缘触发动画,但是效果是随意的。我可以将鼠标悬停在输入之外,它会意外触发。我可以将鼠标悬停在输入上,它可能会触发,也可能不会触发。如果我将鼠标直接悬停在圆圈的旋钮部分,它会启动,但会很快停止。在轨道中间有一个点,它在悬停中闪烁。有时,当我在圆圈上悬停时,在我将鼠标移动到某个点之前,什么也不会发生。我需要它像其他浏览器一样平滑和可预测。我正在使用Browserstack在Edge上测试它。@BabythBullbell我现在只运行ie11,可能会在标签上设置悬停:焦点无论如何都会放在输入上,否则就要调试,从输入中删除不透明度,以便更好地查看它所处的位置,以调整大小和位置。@BabyThunderball我更新了代码段,使输入成为标签的全宽和全高。告诉我这样是否更好。要触发:hover,元素需要一个大小,而不是不透明度等于0/none。这是你必须注意的一点;谢谢,@G-cyr正在运行IE11!那太好了!我认为没有jQuery我是做不到的!你帮我省了不少麻烦!:@G-Cyrrunninge11有什么理由让你有第二个帐户只用于IE11答案,而不只是用普通帐户回答?
.switch {
      display: inline-block;
      height: 113px;
      margin: 10px 23px;
      position: relative;
      width: 55px;
    }

    .switch input {
      height: 0;
      opacity: 0;
      width: 0;
    }

    .slider {
      border: 1px solid #cc80ff;
      bottom: 0;
      cursor: pointer;
      left: 0;
      position: absolute;
      right: 0;
      top: 0;
      -moz-transition: 0.4s;
      -o-transition: 0.4s;
      -webkit-transition: 0.4s;
      transition: 0.4s;
    }

    .slider::before {
      border: 1px solid #cc80ff;
      bottom: 60px;
      content: "";
      height: 43px;
      left: 5px;
      position: absolute;
      -moz-transition: 0.4s;
      -o-transition: 0.4s;
      -webkit-transition: 0.4s;
      transition: 0.4s;
      width: 43px;
    }

    input:hover + .slider {
      background-color: #cc80ff;
      background-color: rgba(204, 128, 255, 0.8);
    }

    input:focus + .slider {
      box-shadow: 0 0 1px #cc80ff;
    }

    input:hover + .slider::before {
      background-image: -moz-linear-gradient(bottom right, #cc80ff, #e4d8cb, #cc80ff);
      background-image: -ms-linear-gradient(bottom right, #cc80ff, #e4d8cb, #cc80ff);
      background-image: -o-linear-gradient(bottom right, #cc80ff, #e4d8cb, #cc80ff);
      background-image: -webkit-linear-gradient(bottom right, #cc80ff, #e4d8cb, #cc80ff);
      background-image: linear-gradient(to bottom right, #cc80ff, #e4d8cb, #cc80ff);
      -moz-transform: translateY(54px);
      -ms-transform: translateY(54px);
      -o-transform: translateY(54px);
      -webkit-transform: translateY(54px);
      transform: translateY(54px);
    }

    /* ----- Rounded sliders ----- */
    .slider.round {
      border-radius: 34px;
    }

    .slider.round::before {
      border-radius: 50%;
    }
jQuery.easing['jswing'] = jQuery.easing['swing'];
jQuery.extend(jQuery.easing, {
  easeOutBounce: function(x, t, b, c, d) {
    if ((t /= d) < (1 / 2.75)) {
      return c * (7.5625 * t * t) + b
   } else if (t < (2 / 2.75)) {
      return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b
    } else if (t < (2.5 / 2.75)) {
      return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b
    } else {
      return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b
    }
  }
});

//This bit I understand, but I don't know how this works with CSS or the above. 
$('.slider').hover(function() {
    $(this).stop().animate({
        top: -50
    },900, "easeOut");
}, function() {
    $(this).stop().animate({
        top: 0
    }, 900, "easeOut");
});