大家好,我对Ajax悬停有一个问题。我试图使像tumblr的userHoverCard。但是当我将其与Ajax结合使用时,悬停动画无法正常工作。
这是不带Ajax CSS的 DEMO 。在此演示中,您可以看到.p-tooltip将鼠标悬停在图像上时将以动画效果打开。
.p-tooltip
但是,如果从我的测试页中单击此 DEMO ,则可以看到将鼠标悬停在图像上时.p-tooltip将无法打开带有动画效果的图像。
HTML
<div class="p-tooltip"></div> <div class="summary" data-id="25"> <a href=#" class="profile-ava"></a> </div> <div class="summary" data-id="20"> <a href=#" class="profile-ava"></a> </div> <div class="summary" data-id="25"> <a href=#" class="profile-ava"></a> </div>
这是我的ajax代码:
$(document).ready(function() { function showProfileTooltip(e, id){ e.append($('.p-tooltip').css({ 'top':'20', 'left':'80' }).show()); //send id & get info from get_profile.php $.ajax({ url: 'get_profile.php?uid='+id, beforeSend: function(){ $('.p-tooltip').html('Loading..'); }, success: function(html){ $('.p-tooltip').html(html); } }); } function hideProfileTooltip(){ $('.p-tooltip').hide().fadeIn('fast'); } $('.summary a').hover(function(e){ var id = $(this).attr('data-id'); showProfileTooltip($(this), id); }, function(){ setTimeout(function(){ hideProfileTooltip(); },2000); }); });
这是CSS代码:
.summary { margin: 50px auto 0; width: 50px; height: 50px; position: relative; } .profile-ava { width: 50px; height: 50px; background-image: url(http://gravatar.com/avatar/3913c4e14034c0a7f28db2c632290c21?s=80); border-radius: 3px; background-size: 50px 50px; display: block; } .summary a:hover:before { content: ''; position: absolute; display: block; bottom: -10px; left: 0; height: 10px; width: 100%; z-index: 2; } .p-tooltip { position: absolute; margin-top: 10px; top: 100%; left: 50%; margin-left: -140px; width: 280px; max-height: 120px; border-radius: 5px; overflow: hidden; background-color: #F0F0F0; visibility: hidden; opacity: 0; transition: all 0.5s ease; } .profile-header { height: 120px; background-image: url(https://pbs.twimg.com/profile_banners/571038694/1395748220/1500x500); background-size: auto 120px; background-position: 50%; } .profile-navigation { position: absolute; top: 0; left: 0; padding: 10px; width: 100%; box-sizing: border-box; } .profile-nick { color: #fff; margin: 0; padding: 0.4em 0; font-size: 0.8em; font-weight: bold; } .profile-action { float: right; background-color: #eee; padding: 0.4em; border-radius: 2px; color: inherit; text-decoration: none; font-size: 0.8em; font-weight: bold; } .p-tooltip .profile-ava { margin: -40px auto 0; width: 80px; height: 80px; background-size: 80px; border: 3px solid #F0F0F0; border-radius: 5px; } .profile-info { text-align: center; padding: 10px; opacity: 0; } .profile-title {font-size: 1.6em; margin: 0;} .profile-description { margin: 0; font-size: 0.8em; } .profile-items {margin: 0px; padding: 10px;} .profile-items:after { content: ''; display: table; clear: both; } .profile-items li { width: 80px; height: 80px; background-size: cover; background-position: center; float: left; display: block; border-radius: 3px; } .profile-items li:not(:first-child) {margin-left: 10px;} .profile-items li:nth-child(1) { background-image: url(https://o.twimg.com/1/proxy.jpg?t=FQQVBBgwaHR0cHM6Ly9pLnl0aW1nLmNvbS92aS9CM3lna2lYRXVyWS9ocWRlZmF1bHQuanBnFAIWABIA&s=z1wybbbNHF0pyLthl3xhxVBNjbYlAEWEzPd-dUtrWOY); } .profile-items li:nth-child(2) { background-image: url(https://pbs.twimg.com/media/B7pkXfgCIAAwoY0.jpg:thumb); } .profile-items li:nth-child(3) { background-image: url(https://pbs.twimg.com/media/B7A3NHjIIAIt6eg.png:large); } .profile-header { -webkit-transform: translate(0, -50px); -moz-transform: translate(0, -50px); transform: translate(0, -50px); -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; transition: all 0.2s ease-out; -webkit-transition-delay: 0.1s; -moz-transition-delay: 0.1s; transition-delay: 0.1s; opacity: 0; } .profile-info { -webkit-transform: translate(0, 50px); -moz-transform: translate(0, 50px); transform: translate(0, 50px); -webkit-transition: all 0.3s ease-out; -moz-transition: all 0.3s ease-out; transition: all 0.3s ease-out; -webkit-transition-delay: 0.1s; -moz-transition-delay: 0.1s; transition-delay: 0.1s; } .p-tooltip .profile-ava { -webkit-transform: scale(0.5) translate(0, -10px); -moz-transform: scale(0.5) translate(0, -10px); transform: scale(0.5) translate(0, -10px); -webkit-transition: all 0.5s ease-out; -moz-transition: all 0.5s ease-out; transition: all 0.5s ease-out; -webkit-transition-delay: 0.1s; -moz-transition-delay: 0.1s; transition-delay: 0.1s; opacity: 0; } .profile-items li { -webkit-transform: translate(0, 50px); -moz-transform: translate(0, 50px); transform: translate(0, 50px); -webkit-transition: all 0.3s ease-out; -moz-transition: all 0.3s ease-out; transition: all 0.3s ease-out; -webkit-transition-delay: 0.3s; -moz-transition-delay: 0.3s; transition-delay: 0.3s; opacity: 0; } .profile-items li:nth-child(2) { -webkit-transition-delay: 0.35s; -moz-transition-delay: 0.35s; transition-delay: 0.35s; } .profile-items li:nth-child(3) { -webkit-transition-delay: 0.4s; -moz-transition-delay: 0.4s; transition-delay: 0.4s; } .summary:hover .p-tooltip { visibility: visible; opacity: 1; max-height: 600px; } .summary:hover .profile-header, .summary:hover .profile-info, .summary:hover .p-tooltip .profile-ava, .summary:hover .profile-items li { -webkit-transform: translate(0,0) scale(1); -moz-transform: translate(0,0) scale(1); transform: translate(0,0) scale(1); opacity: 1; }
任何人都可以帮助我!
本质上,我已经创建了一个非常聪明的解决方法。这是一个覆盖图像的遮罩(不可见),直到加载html,然后将z-index降低后才进行悬浮css。鼠标悬停在容器上。
小提琴
.summary { margin: -50px auto 0; width: 50px; height: 50px; position: relative; z-index: 0; } .summary-mask { margin: 50px auto 0; width: 50px; height: 50px; position: relative; z-index: 1; } .loaded .summary-mask { z-index: -1; }
<div class="the-container"> <div class="summary-mask"></div> <div class="summary" data-id="100"> <a href="http://kraigo.tumblr.com/" class="profile-ava"></a> <div class="user-container"></div> </div> </div>
JS
var response = '<div class="p-tooltip"> <div class="profile-header"></div> <div class="profile-navigation"> <a href="http://kraigo.tumblr.com/" class="profile-action">Follow</a> <p class="profile-nick"> <a href="http://kraigo.tumblr.com/">Page Name</a> </p> </div> <div class="profile-ava"></div> <div class="profile-info"> <h1 class="profile-title">Username</h1> <p class="profile-description">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry\'s standard dummy ..</p> </div> <ul class="profile-items"> <li></li> <li></li> <li></li> </ul> </div>'; $(document).ready(function () { function showProfileTooltip(e, id) { //send id & get info from get_profile.php $.ajax({ url: '/echo/html/', data: { html: response, delay: 0 }, method: 'post', success: function (returnHtml) { e.find('.user-container').html(returnHtml).promise().done(function () { $('.the-container').addClass('loaded'); }); } }); } function hideProfileTooltip() { $('.the-container').removeClass('loaded'); } $('.the-container').hover(function (e) { var id = $(this).find('.summary').attr('data-id'); showProfileTooltip($(this), id); }, function () { hideProfileTooltip(); }); });