jQuery Popup Bubble / Tooltip [đã đóng]


99

Tôi đang cố tạo một "bong bóng" có thể bật lên khi onmouseoversự kiện được kích hoạt và sẽ vẫn mở miễn là chuột ở trên vật phẩm đã ném onmouseoversự kiện HOẶC nếu chuột được di chuyển vào bong bóng. Bong bóng của tôi sẽ cần có tất cả cách xử lý HTML và kiểu dáng bao gồm siêu liên kết, hình ảnh, v.v.

Về cơ bản tôi đã hoàn thành điều này bằng cách viết khoảng 200 dòng JavaScript xấu xí nhưng tôi thực sự muốn tìm một plugin jQuery hoặc một số cách khác để làm sạch điều này một chút.


1
@bluefeet Lạc đề? Nghiêm túc? Anh chàng đã hỏi một câu hỏi về cách rút ngắn 200 dòng mã của mình bằng cách sử dụng JQuery và nó đã được sử dụng gần một phần tư triệu lần (vừa giải quyết được vấn đề của tôi) và bạn đánh dấu nó lạc đề? Điều gì về điều này mời bất kỳ câu trả lời chắc chắn hơn bất kỳ câu hỏi nào khác?
Chris Sharp

@ChrisSharp Bạn đã đọc lý do tại sao nó bị đóng chưa? Nó đặc biệt yêu cầu "một plugin jQuery tốt để tạo các bong bóng lạ mắt". Các câu hỏi yêu cầu đề xuất là lạc đề, nhưng nếu bạn nghĩ rằng điều này có thể được viết lại để làm cho nó đúng chủ đề, thì vui lòng đề xuất chỉnh sửa để làm cho nó thành hình.
Taryn

Câu trả lời:


158

Qtip là cái hay nhất mà tôi từng thấy. Đó là MIT được cấp phép, đẹp, có tất cả các cấu hình bạn cần.

Tùy chọn nhẹ yêu thích của tôi là hơi say . Cũng được MIT cấp phép. Nó truyền cảm hứng cho plugin chú giải công cụ của Bootstrap .


6
Đến nay là tốt nhất. Một dòng mã so với tất cả các giải pháp khổng lồ khác mà những người khác đã cung cấp. Tôi hy vọng phản hồi này được bình chọn.
Peter Walke

2
Qtip có vấn đề về khả năng tương thích với jQuery 1.4+. Tuy nhiên, bản sửa lỗi một dòng đơn giản đối với trình cắm qTip sẽ khắc phục được sự cố. Xem ở đây: craigsworks.com/projects/forums/...
tchaymore

4
Tôi đã xem Qtip ngày hôm nay và trong khi nó hoạt động, có một số mặt trái: đã không được cập nhật trong một thời gian, bị thiếu hoặc không ghi lại một số điều rõ ràng (muốn tạo văn bản mẹo công cụ với một hàm được gọi là khi mẹo được hiển thị) và là một bản tải xuống khổng lồ (một phần vì nó dường như bao gồm rất nhiều thứ như kiểu dáng góc tròn). Hy vọng rằng không bị coi là tiêu cực - chỉ cố gắng cứu người khác một chút thời gian. Chắc chắn đáng xem xét nhưng có một số nhược điểm.
Cymen

4
@Cymen, tôi không thể nói mọi thứ diễn ra như thế nào vào khoảng tháng 9 năm 10, nhưng không có điều gì bạn nói là đúng nữa. Đó là: hoạt động, được ghi chép đầy đủ và cho phép kích thước tải xuống rất có thể tùy chỉnh trên một giao diện người dùng jQuery.
Kirk Woll

52

Điều này cũng có thể được thực hiện dễ dàng với sự kiện di chuột qua. Tôi đã làm nó và nó không mất 200 dòng nào cả. Bắt đầu với việc kích hoạt sự kiện, sau đó sử dụng một hàm sẽ tạo chú giải công cụ.

$('span.clickme').mouseover(function(event) {
    createTooltip(event);               
}).mouseout(function(){
    // create a hidefunction on the callback if you want
    //hideTooltip(); 
});

function createTooltip(event){          
    $('<div class="tooltip">test</div>').appendTo('body');
    positionTooltip(event);        
};

Sau đó, bạn tạo một hàm định vị chú giải công cụ với vị trí bù đắp của phần tử DOM đã kích hoạt sự kiện di chuột qua, điều này có thể thực hiện được với css.

function positionTooltip(event){
    var tPosX = event.pageX - 10;
    var tPosY = event.pageY - 100;
    $('div.tooltip').css({'position': 'absolute', 'top': tPosY, 'left': tPosX});
};

1
Đơn giản và hữu ích, không cần plugin XX khi bạn có thể viết nó một cách dễ dàng. PS: vị trí: tuyệt đối bị thiếu :)
kheraud

1
Bạn có thể muốn thêm đơn vị "px" vào số nguyên của mình. 'top': tPosY + 'px'và như thế.
Robusto

1
$ ('span.klickme') - tệ quá :)
formatc

Tôi thích cách tiếp cận của bạn. Cách rất dễ dàng để làm mà không sử dụng bất kỳ thư viện bên ngoài
Amic MING

12

Mặc dù qTip (câu trả lời được chấp nhận) là tốt nhưng tôi đã bắt đầu sử dụng nó và nó thiếu một số tính năng tôi cần.

Sau đó, tôi tình cờ gặp PoshyTip - nó rất linh hoạt và thực sự dễ sử dụng. (Và tôi có thể làm những gì tôi cần)


4

Được rồi, sau một số công việc, tôi có thể nhận được một "bong bóng" bật lên và biến mất vào mọi thời điểm thích hợp. Có rất nhiều kiểu cần phải diễn ra nhưng về cơ bản đây là mã tôi đã sử dụng.

<script type="text/javascript">
    //--indicates the mouse is currently over a div
    var onDiv = false;
    //--indicates the mouse is currently over a link
    var onLink = false;
    //--indicates that the bubble currently exists
    var bubbleExists = false;
    //--this is the ID of the timeout that will close the window if the user mouseouts the link
    var timeoutID;

    function addBubbleMouseovers(mouseoverClass) {
        $("."+mouseoverClass).mouseover(function(event) {
            if (onDiv || onLink) {
                return false;
            }

            onLink = true;

            showBubble.call(this, event);
        });

        $("." + mouseoverClass).mouseout(function() {
            onLink = false;
            timeoutID = setTimeout(hideBubble, 150);
        });
    }

    function hideBubble() {
        clearTimeout(timeoutID);
        //--if the mouse isn't on the div then hide the bubble
        if (bubbleExists && !onDiv) {
             $("#bubbleID").remove();

             bubbleExists = false;
        }
    }

    function showBubble(event) {
        if (bubbleExists) {
            hideBubble();
        }

        var tPosX = event.pageX + 15;
        var tPosY = event.pageY - 60;
        $('<div ID="bubbleID" style="top:' + tPosY + '; left:' + tPosX + '; position: absolute; display: inline; border: 2px; width: 200px; height: 150px; background-color: Red;">TESTING!!!!!!!!!!!!</div>').mouseover(keepBubbleOpen).mouseout(letBubbleClose).appendTo('body');

        bubbleExists = true;
    }

    function keepBubbleOpen() {
        onDiv = true;
    }

    function letBubbleClose() {
        onDiv = false;

        hideBubble();
    }


    //--TESTING!!!!!
    $("document").ready(function() {
        addBubbleMouseovers("temp1");
    });
</script>

Đây là một đoạn mã của html đi kèm với nó:

<a href="" class="temp1">Mouseover this for a terribly ugly red bubble!</a>

4

Tôi đã lập trình một Plugin jQuery hữu ích để tạo cửa sổ bật lên bong bóng thông minh dễ dàng chỉ với một dòng mã trong jQuery!

Những gì bạn có thể làm: - đính kèm cửa sổ bật lên vào bất kỳ phần tử DOM nào! - Các sự kiện di chuột qua / di chuột được tự động quản lý! - thiết lập các sự kiện cửa sổ bật lên tùy chỉnh! - tạo cửa sổ bật lên bóng mờ thông minh! (trong IE cũng vậy!) - chọn các mẫu kiểu của cửa sổ bật lên trong thời gian chạy! - chèn tin nhắn HTML bên trong cửa sổ bật lên! - đặt nhiều tùy chọn như: khoảng cách, vận tốc, độ trễ, màu sắc…

Bóng đổ và các mẫu được tô màu của Popup được hỗ trợ đầy đủ bởi Internet Explorer 6+, Firefox, Opera 9+, Safari

Bạn có thể tải xuống các nguồn từ http://plugins.jquery.com/project/jqBubblePopup



3

Nghe có vẻ bạn không muốn di chuột qua các sự kiện: bạn muốn sự kiện jQuery hover ().

Và những gì bạn có vẻ muốn là một chú giải công cụ "phong phú", trong trường hợp đó tôi đề xuất chú giải công cụ jQuery . Với tùy chọn bodyHandler, bạn có thể đưa HTML tùy ý vào.


Này, cảm ơn vì phản hồi siêu nhanh! Tôi chỉ lướt qua tài liệu và tôi không chắc có tùy chọn để "chú giải công cụ" ở một vị trí cố định để bạn có thể di chuyển chuột vào nó và nhấp vào một liên kết. Bạn đã sử dụng cái này bao giờ chưa? Trong khi chờ đợi tôi sẽ tải về và bắt đầu chơi
jakejgordon

2

Tôi đang cố tạo một "bong bóng" có thể bật lên khi sự kiện onmouseover được kích hoạt và sẽ vẫn mở miễn là con chuột ở trên vật phẩm đã ném sự kiện onmouseover HOẶC nếu chuột được di chuyển vào bong bóng. Bong bóng của tôi sẽ cần phải có tất cả cách sử dụng html và kiểu dáng bao gồm siêu liên kết, hình ảnh, v.v.

Tất cả những sự kiện đó được quản lý hoàn toàn bởi plugin này ...

http://plugins.jquery.com/project/jqBubblePopup


Liên kết này không còn tốt nữa ...
Prescott Chartier


2

Phiên bản 3.0 mới của plugin jQuery Bubble Popup hỗ trợ jQuery v.1.7.2, hiện là phiên bản ổn định và mới nhất của thư viện javascript nổi tiếng nhất.

Tính năng thú vị nhất của phiên bản 3.0 là Bạn có thể sử dụng cùng lúc plugin jQuery & Bubble Popup với bất kỳ thư viện và khung javascript nào khác như Script.aculo.us, Mootols hoặc Prototype vì plugin được đóng gói hoàn toàn để tránh các vấn đề không tương thích;

jQuery Bubble Popup đã được thử nghiệm và hỗ trợ rất nhiều trình duyệt đã biết và “chưa biết”; xem tài liệu để biết danh sách đầy đủ.

Giống như các phiên bản trước, plugin jQuery Bubble Popup tiếp tục được phát hành theo giấy phép MIT; Bạn có thể tự do sử dụng jQuery Bubble Popup trong các dự án thương mại hoặc cá nhân miễn là giữ nguyên tiêu đề bản quyền.

tải xuống phiên bản mới nhất hoặc truy cập các bản giới thiệu và hướng dẫn trực tiếp tại http://www.maxvergelli.com/jquery-bubble-popup/


1

Tự động kích thước Bong bóng bật lên đơn giản

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <link href="bubble.css" type="text/css" rel="stylesheet" />
  <script language="javascript" type="text/javascript" src="jquery.js"></script>
  <script language="javascript" type="text/javascript" src="bubble.js"></script>
</head>
<body>
  <br/><br/>
  <div class="bubbleInfo">
      <div class="bubble" title="Text 1">Set cursor</div>
  </div>
  <br/><br/><br/><br/>
  <div class="bubbleInfo">
      <div class="bubble" title="Text 2">Set cursor</div>
  </div>
</body>
</html>

bubble.js

$(function () {     
  var i = 0;
  var z=1;
  do{
    title = $('.bubble:eq('+i+')').attr('title');
    if(!title){
      z=0;
    } else {
       $('.bubble:eq('+i+')').after('<table style="opacity: 0; top: -50px; left: -33px; display: none;" id="dpop" class="popup"><tbody><tr><td id="topleft" class="corner"></td><td class="top"></td><td id="topright" class="corner"></td></tr><tr><td class="left"></td><td>'+title+'</td><td class="right"></td></tr><tr><td class="corner" id="bottomleft"></td><td class="bottom"><img src="bubble/bubble-tail.png" height="25px" width="30px" /></td><td id="bottomright" class="corner"></td></tr></tbody></table>');
       $('.bubble:eq('+i+')').removeAttr('title');
    }
    i++;
  }while(z>0)

  $('.bubbleInfo').each(function () {
    var distance = 10;
    var time = 250;
    var hideDelay = 500;        
    var hideDelayTimer = null;       
    var beingShown = false;
    var shown = false;
    var trigger = $('.bubble', this);
    var info = $('.popup', this).css('opacity', 0);        

    $([trigger.get(0), info.get(0)]).mouseover(function () {
      if (hideDelayTimer) clearTimeout(hideDelayTimer);
      if (beingShown || shown) {
        // don't trigger the animation again
        return;
      } else {
        // reset position of info box
        beingShown = true;

        info.css({
        top: -40,
        left: 10,
        display: 'block'
        }).animate({
        top: '-=' + distance + 'px',
        opacity: 1
        }, time, 'swing', function() {
          beingShown = false;
          shown = true;
        });
      }          
      return false;
    }).mouseout(function () {
      if (hideDelayTimer) clearTimeout(hideDelayTimer);
      hideDelayTimer = setTimeout(function () {
        hideDelayTimer = null;
        info.animate({
          top: '-=' + distance + 'px',
          opacity: 0
        }, time, 'swing', function () {
          shown = false;
          info.css('display', 'none');
        });
      }, hideDelay);
      return false;
    });
  }); 
});

bubble.css

/* Booble */
.bubbleInfo {
    position: relative;
    width: 500px;
}
.bubble {       
}
.popup {
    position: absolute;
    display: none;
    z-index: 50;
    border-collapse: collapse;
    font-size: .8em;
}
.popup td.corner {
    height: 13px;
    width: 15px;
}
.popup td#topleft { 
    background-image: url(bubble/bubble-1.png); 
} 
.popup td.top { 
    background-image: url(bubble/bubble-2.png); 
}
.popup td#topright { 
    background-image: url(bubble/bubble-3.png); 
}
.popup td.left { 
    background-image: url(bubble/bubble-4.png); 
}
.popup td.right { 
    background-image: url(bubble/bubble-5.png); 
}
.popup td#bottomleft { 
    background-image: url(bubble/bubble-6.png); 
}
.popup td.bottom { 
    background-image: url(bubble/bubble-7.png); 
    text-align: center;
}
.popup td.bottom img { 
    display: block; 
    margin: 0 auto; 
}
.popup td#bottomright { 
    background-image: url(bubble/bubble-8.png); 
}


1

Bạn có thể sử dụng qTip cho việc này; Tuy nhiên, bạn phải viết mã một chút để khởi chạy nó trong sự kiện di chuột qua; Và trong trường hợp bạn muốn có hình mờ mặc định trên các trường văn bản của mình, bạn phải sử dụng plugin hình mờ ...

Tôi nhận ra rằng điều này dẫn đến rất nhiều mã lặp lại; Vì vậy, tôi đã viết một plugin trên qTip giúp bạn dễ dàng đính kèm cửa sổ bật lên thông tin vào các trường. Bạn có thể xem tại đây: https://bitbucket.org/gautamtandon/jquery.attachinfo

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.