使用CSS/JQUERY触发两个连续的快速悬停来模拟脉冲效果。

3

我正在开发一个时间轴的css/jquery模块,每个时间节点/检查点由三个同心圆表示。当滚动到检查点时或鼠标悬停在其上时,外部/第三个圆会通过改变其背景颜色显示出来,在鼠标悬停事件中,通过将其背景颜色更改为其外部div的颜色而淡出。

我的问题是如何模拟两次快速的鼠标悬停(例如相隔0.7秒),以产生类似于脉冲的效果? 在此处查看实际效果

以下是完整的代码:

<html lang="us">
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <!-- ------------------------------------ -->
    <!-- SCRIPTS -->
    <!-- ------------------------------------ -->

    <!-- jQuery -->
    <script type="text/javascript" src="js/jquery-2.2.4.min.js"></script>

   <!-- timedulines SCRIPT -->
    <script type="text/javascript" src="js/draft.js"></script>



    <!-- ------------------------------------ -->
    <!-- STYLESHEETS -->
    <!-- ------------------------------------ -->

    <!-- BOOTSTRAP 3.3.6 STYLESHEET -->
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"  />

    <!-- timedulines STYLE-->
    <link rel="stylesheet" type="text/css" href="css/draft.css" />      

</head>

<body>
    <div class="container-fluid" id="timedulines">
        <div class="time-node" label="2011"></div>
        <div class="time-node" label="2011"></div>
        <div class="time-node" label="2011"></div>
        <div class="time-node" label="2011"></div>
        <div class="time-node" label="2011"></div>

    </div>
</body>     

@import url(https://fonts.googleapis.com/css?family=Alegreya+Sans+SC:100);

body
{
  padding:32px;
  background-color:#f2f2f2;
}

#timedulines
{
    background-color:#999 ;
}

.row
{
    height:600px;
    text-align:center;
}
.circle
{
 border-width:0px;
  border-radius:50%;
}

.inner-box
{
  background-color:#585858;
  color:#fff;
  font-family: 'Alegreya Sans SC', sans-serif;  
  text-align:center;
}
.inner-box .checkpoint-date
{
    font-size:8px;
}


.middle-box
{
background :#9BAD01;
border: 0px #eee 1px;
-webkit-box-shadow: 0px 0px 13px 2px rgba(0,0,0,0.65);
-moz-box-shadow: 0px 0px 13px 2px rgba(0,0,0,0.65);
box-shadow: 0px 0px 13px 2px #353535;
}

.outer-box
{
background-color:#999; 
}
.outer-box
{
    -webkit-transition: all 1s; /* Safari */
    transition: all 1s;

}

$(document).ready(function()
{

    var timeNodeCount=0;
    var colorPalette=        ['#FEC900','#FF6D00','#9BAD01','#C0116E','#4A6AB5','#B51A1E','#595779'];
var fontToPaddingRatio=0.55;
var innerToMiddleRatio=0.6;
var middleToOuterRatio=0.8;
var innerBoxSize=50; 


/*Build the full HTML structure from the "shortened" one*/
$('.time-node').each(function(i)
{
    timeNodeCount++;
    $(this).prop('id','time-node-'+timeNodeCount);
    $(this).append
    (
    '<div class="row">'+
    '<div class="col-md-2 col-md-offset-5">'+
    '<div class="checkpoint">'+
    '<div class="circle outer-box">'+
    '<div class="circle middle-box">'+
    '<div class="circle inner-box">'+
    '<span class="checkpoint-date">'+$(this).attr('label')+'</span>'+
    '</div>'+
    '</div>'+
    '</div>'+
    '</div>'+
    '</div>'+
    '</div>'
    );
});

$('.time-node').each(function(i)
{
    $(this).find('.middle-box').css('background',colorPalette[i]);
});

var dateFontSize=parseInt($('.checkpoint-date').css('font-size'));

/*Find the adequate font-size that fits into the checkpoint-date span (5px tolerance)*/
while(parseInt($('.checkpoint-date').width())<=innerBoxSize-5)
{           
    $('.checkpoint-date').css('font-size',++dateFontSize);
}

/*Inner box*/
var innerBoxFontSize=$('.checkpoint-date').height();

$('.inner-box').width(innerBoxSize);
$('.inner-box').height(innerBoxSize);
$('.inner-box').each(function(i,v)
{
    v.style.setProperty('padding-top',(innerBoxSize-innerBoxFontSize)/2-5,'important');
});

/*Middle box*/
var middleBoxSize=innerBoxSize/innerToMiddleRatio;

$('.middle-box').width(middleBoxSize);
$('.middle-box').height(middleBoxSize);

/*Outer Box*/
var outerBoxSize=middleBoxSize/middleToOuterRatio;

$('.outer-box').width(outerBoxSize);
$('.outer-box').height(outerBoxSize);

/*Center the circles in each others*/       
$('.middle-box').each(function(i,v)
{
    v.style.setProperty('padding',(middleBoxSize-innerBoxSize)/2,'important');
});
$('.outer-box').each(function(i,v)
{
    v.style.setProperty('padding',(outerBoxSize-middleBoxSize)/2,'important');
});

$(window).load(function()
{
    /*Center the checkpoint vertically to the row*/ 
    $('.row').height($('.checkpoint').height()*3)

    /*Center the checkpoint vertically to the row*/ 
    $('.row').css('padding-top',$('.checkpoint').height()); 
});
$('.checkpoint').each(function(i,v)
    {
    $(this).hover
    (
    function()
    {
    $(this).find('.outer-box').css("background-color","#bbb");
    },
    function()
    {
    var hiddenBg=$('#timedulines').css('background-color');
    $(this).find('.outer-box').css('background-color',hiddenBg);
    }
    )
    });

});


1
如果您想要脉冲效果,最好在CSS中创建一个动画,这样会更简单 - 就像这样:http://codepen.io/olam/pen/zcqea - Rory McCrossan
为什么要使用jQuery?你可以在CSS3中完成它。看看这个问题https://dev59.com/YW445IYBdhLWcg3wWI6L - smoksnes
请问您能否也发布一下您的HTML和CSS代码? - vijayP
我编辑了问题并添加了完整的源代码HTML/CSS/JS以及一个指向实时演示的链接。 - medunes
2个回答

1

这可能是适合使用Transit JS (http://ricostacruz.com/jquery.transit/) 的一个不错的编程工作,并且可以使用缩放函数来实现以下操作:

$('.circle outer-box').transition({ scale: 1.5, useTranslate3d: true }, { queue: true, duration: 200, easing: null, complete: myCallbackFunc });

function myCallbackFunc() {
$('.circle outer-box').transition({ scale: 1.0, useTranslate3d: true }, { queue: true, duration: 200, easing: null, complete: null });
}

0

.hover(callback).on('hover', callback) 的简写形式,这意味着它向 .checkpoint 添加了一个事件监听器。

如果你想模拟鼠标悬停事件,你可以使用 jQuery 的 trigger 函数,它会执行其名称所示的操作 - 触发一个事件。

在你的情况下,代码可能如下所示:

function triggerEffect(n) {
    if (n > 0) {
        $('.checkpoint').trigger('mouseover');
        setTimeout(function () { triggerEffect(n-1); }, 700);
    }
}

triggerEffect(2);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接