简体   繁体   English

根据左右元素显示左右悬停卡?

[英]Show hover card left right based on element left right?

My HTML has a div and when I hover the div a card will be displayed on the right side.我的 HTML 有一个 div,当我将鼠标悬停在 div 上时,右侧会显示一张卡片。 When the div is in left side then this still show right side.当 div 在左侧时,这仍然显示右侧。 When I reduce the browser width then this card partially show the detail.当我减小浏览器宽度时,这张卡片会部分显示细节。

How to automatically position using jquery.如何使用 jquery 自动定位。 在此处输入图片说明

var thisEl = $(this); 
var offsets = thisEl.offset();
var thisElTopOffset = offsets.top;
var thisElLeftOffset = offsets.left;

This will show as i mentioned in the image.这将显示为我在图像中提到的。 But i try to position the div to left when the elements are in right.但是当元素在右侧时,我尝试将 div 定位到左侧。

Code: I tried so far代码:到目前为止我尝试过

allHoverCardTriggers.on({
                click: function(event) {
                event.preventDefault();                 
                    var thisEl = $(this);
                    cardTimer = setTimeout(function(){
                        var docWidth = $(document).width();
                        var rightSide = false;

                        //return user id
                        var userLink = thisEl.attr('href');
                        if($('.ViewProfilePage').length && $('img.lia-user-avatar-profile',thisEl).length){
                            var userLink = document.location.href;
                        } else if(thisEl.attr('href')=='#'){
                            return false;
                        }

                        var thisLen = (userLink).split('/');
                        thisUserID = (thisLen)[thisLen.length-1];
                        var thisCard = $('.profileCard[data-user='+thisUserID+']',cardWrapper);

                        var offsets = thisEl.offset();
                        var thisElTopOffset = offsets.top;
                        var thisElLeftOffset = offsets.left;

                            if(thisCard.length && $('.profileCard[data-user='+thisUserID+'] .preloader',cardWrapper).length<1)
                            {
                                $('.profileCard',cardWrapper).hide();
                                rightSide?thisCard.addClass('rightArrow'):thisCard.removeClass('rightArrow');
                                thisCard.delay(500).css({'top':thisElTopOffset,'left':thisElLeftOffset}).stop().show();
                            } 
                            else 
                            {
                                var ajaxReturn = '';

                                thisCard.remove();

                                //profile card wrapper markup
                                var rightArrowClass = rightSide?'rightArrow':'';
                                var profileCardHtml = '<div class="profileCard '+rightArrowClass+'" style="display:block;top:'+thisElTopOffset+'px;left:'+thisElLeftOffset+'px;" data-user="'+thisUserID+'"><div class="inner"><img src="/html/assets/feedback_loading_trans.gif" class="preloader" style="margin:80px auto;display:block;" /></div></div>';

                                $.when(
                                    //get the background
                                    $.ajax({
                                        type: 'GET',
                                        url: userApiUrl+thisUserID,
                                        dataType: 'html',
                                        success: function(data) {
                                            $('.profileCard',cardWrapper).hide();
                                            ajaxReturn = data;
                                        }
                                    })
                                    )
                                    .done(function(){
                                        cardWrapper.append(profileCardHtml);
                                        $('.profileCard[data-user='+thisUserID+']',cardWrapper).eq(0).empty().html(ajaxReturn);
                                        if($('.profileCard[data-user='+thisUserID+'] .preloader',cardWrapper).length){
                                            $('.profileCard[data-user='+thisUserID+'] .preloader',cardWrapper).parents('div.profileCard').remove();
                                        }
                                    })
                                    .fail(function(){
                                        // Hide if failed request
                                        $('.profileCard',cardWrapper).hide();
                                    });
                            }
                        }
                    },400);
                },
                mouseleave: function() {
                    clearTimeout(cardTimer);
                    if($('.profileCard[data-user='+thisUserID+']',cardWrapper).length){
                        $('.profileCard[data-user='+thisUserID+']',cardWrapper).delay(500).fadeOut('fast');
                    }
                }
            });
        }

Here is a jQuery solution.这是一个 jQuery 解决方案。 Prior to displaying the popup, the script checks if the offset position of the trigger div plus the popup width falls beyond the screen width and adjusts the popup position accordingly.在显示弹出框之前,脚本会检查触发div的偏移位置加上弹出框width超出屏幕width并相应地调整弹出框位置。

 hover = function(e) { //var position = e.position(); var popup = $('.popup'); popup.attr('style', ''); if (e.offsetLeft + popup.outerWidth() > $( window ).width()) { // adjust for screen width popup.css({ right: $( window ).width() - e.offsetLeft - e.offsetWidth + 'px', top: e.offsetTop - popup.outerHeight() }); } else { // position normally popup.css({ left: e.offsetLeft, top: e.offsetTop - popup.outerHeight() }); } popup.show(); } hide = function() { $('.popup').hide(); }
 .left-hover { position:absolute; left:20px; top:80px; border:1px solid black; } .right-hover { position:absolute; right:20px; top:80px; border:1px solid black; } .popup { position:absolute; display:none; border:1px solid red; width:100px; }
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="left-hover" onmouseover="hover(this)" onmouseout="hide()">Hover me</div> <div class="right-hover" onmouseover="hover(this)" onmouseout="hide()">Hover me</div> <div class="popup">My popup</div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM