悬停时显示当前时间
On hover show current time
我有一个函数,可以隐藏/显示悬停时的超时时间。但现在我想让它显示一个用户徘徊的时间。我知道必须用美元来完成,但我做不到。
JsFiddlehttp://jsfiddle.net/z332ozjs/
<p class="div">
<span class="time">[20:33:49]</span>
Time 1
</p>
<p class="div">
<span class="time">[21:35:49]</span>
Time 2
</p>
var msgTime = $('.div');
var time = $('span.time');
time.hide();
var x;
msgTime.hover(
function () {
x = setTimeout( function() {
$(this).find(time).show();
}, 100);
},
function () {
clearInterval(x);
$(this).find(time).hide();
}
);
这里有一个纯CSS解决方案:
.time {
display: none;
}
.div:hover .time {
display: inline;
}
<p class="div">
<span class="time">[20:33:49]</span>
Time 1
</p>
<p class="div">
<span class="time">[21:35:49]</span>
Time 2
</p>
首先,在这种情况下,纯CSS解决方案可能是最好的,如Chris Pietschmann所示。
如果你想对你已经采取的方法做一些小的改变,这里有一种方法(jsFiddle):
我们没有在保持时间的span
上调用hide()
,而是默认情况下将其隐藏,并根据悬停状态显示/隐藏它。
此外,将类.div
用于您的时间持有div可能是个坏主意,因为它会选择页面上的所有div。使用更具体的div-time
会更好。
至于不知道如何使用$(this)
,jquery事件选择器会在事件回调中自动传输上下文(即this
),以对应于事件发生的元素。
另一件事是,您将一个jquery对象传递给find
jquery函数,但该函数将一个选择器字符串作为参数,并使用它来查找调用find的jquery元素中的元素。所以,你需要改变:
$(this).find(time) // dont pass-in the jquery object "time"
收件人:
$(this).find('.time') // pass in the selector matching the class "time"
因此,当用户悬停在一个元素上时,你可以做的是:
$(this) // select hovered element
.find('.time') // find the time span within it
.show(); // show the time
以下是代码的外观:
var msgTime = $('.div-time');
msgTime.hover(
function() {
$(this).find('.time').show();
},
function() {
$(this).find('.time').hide();
}
);
.time {
display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="div-time">
<span class="time">[20:33:49]</span>
Time 1
</p>
<p class="div-time">
<span class="time">[21:35:49]</span>
Time 2
</p>
几个问题。
首先,在setTimeout
中,由于闭包,您将丢失this
的上下文。
要使用find()
搜索实例,请使用实际的选择器
var msgTime = $('.div');
var time = $('span.time');
time.hide();
var x;
msgTime.hover(
function () {
var $this = $(this); //store reference of element
x = setTimeout( function() {
$this.find('.time').show();// look for actual class
}, 100);
},
function () {
clearInterval(x);
$(this).find('.time').hide();
}
);
在<p>
标签上使用div
类似乎非常令人困惑。在大型应用程序上,这可能会导致的混乱
DEMO
您的css:
.div:hover .time{
display:inline-block
}
.time{
display:none;
}
你的html:
<p class="div">
<span class="time" >[20:33:49]</span>
Time 1
</p>
<p class="div">
<span class="time" >[21:35:49]</span>
Time 2
</p>
相关文章:
- javascript函数将当前时间显示为html选择标记的预选值
- Javascript:如何以毫秒为单位将时间显示为天:小时:分钟
- 使用 Javascript 根据星期几和一天中的时间显示 HTML 元素
- 脚本 - 不同的时间显示不同的内容
- Javascript时间显示来自计算机的上午/下午(快速调整)
- 日期时间倒计时,删除小数,并在每个类别中保留时间显示时间
- 如何仅在指定时间显示文本
- 按星期几和一天中的时间显示不同的背景图像
- 使用不同的持续时间显示一个接一个的图像,中间有一个空白屏幕
- 根据当前加载时间显示链接
- 我想根据它们的时间和持续时间显示json中的元素,并且间隔被settimeout打断
- Javascript在特定时间显示隐藏元素
- 有x轴上的时间显示最近24小时从当前时间
- 鼠标悬停在多个折线图上,相同的x(时间)显示不同的y(价格)
- 在没有偏移时,以本地时间显示数据库中的UTC datetime
- 如何循环在不同时间显示问候语的函数
- 根据一天中的时间显示不同的复选框
- 根据服务器日期和时间显示和隐藏
- JavaScript错误的时间显示在两个时间之间
- Web应用程序中的时区敏感日期和时间显示