jQuery - 结合克隆内容和fadeIn

时间:2013-02-08 11:14:47

标签: jquery jquery-animate appendto

我试图达到这个结果:

tooltip

特点:

  1. 点击即可立即显示工具提示
  2. FadeIn和位置动画同时开始,然后,在动画位置时,元素淡出
  3. 可以一次看到多个工具提示(如果一个接一个地点击两个或更多按钮)
  4. 邮件内容取自动态JSON对象。
  5. 我能够复制并显示工具提示,但出于某种原因无法为其设置动画,或者替换它的内容。

    我不知道如何选择新的重复元素。

    请参阅下面的示例错误,或 jsFiddle

    html

    <div id="ptsAlert">
        <span class="ptsAlert">
            message
            <div class="ptsAlert-arrow"></div>
        </span>
    </div>
    
    <table>
        <tr>
            <td class="btn">01</td>
            <td class="btn">02</td>
            <td class="btn">03</td>
        </tr>
        <tr>
            <td class="btn">04</td>
            <td class="btn">05</td>
            <td class="btn">06</td>
        </tr>
    </table> 
    

    的CSS:

    h1 {
        font-size:50px;
        margin:10px;
    }
    body {
        text-align:center;
    }
    td {
        border: 1px solid;
        padding: 5px;
        cursor: pointer;
    }
    
    .ptsAlert {
      display:none;
      background-color: #EE0000;
      color: #FFFFFF;
      font-size: 27px;
      font-weight: bold;
      line-height: 1.7em;
      margin: 10px auto;
      padding: 0 10px;
      position: absolute;
      text-align: center;
    }
    
    .ptsAlert-arrow{
      border-color: #EE0000 transparent transparent;
      border-style: solid;
      border-width: 8px;
      bottom: -15px;
      height: 0;
      left: 3px;
      position: absolute;
      width: 0;
    }
    

    jQuery的:

    //Function to show points alerts
    $('.btn').click(function(event) {
        var points = 10;
            $('#ptsAlert').clone(true, true).contents()
                .appendTo('body')
                .css('top', (event.pageY - 75) + 'px')
                .css('left', (event.pageX - 10) + 'px')
                .css('display', 'inline-block')
                //.hide().fadeIn();
    });
    

    注释行.hide().fadeIn()会产生以下错误:

    NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIDOMWindow.getComputedStyle]
    

1 个答案:

答案 0 :(得分:4)

//Function to show points alerts
$('.btn').click(function(event) {

      $('#ptsAlert').find("> span").clone(true, true)
            .css('top', (event.pageY - 75) + 'px')
            .css('left', (event.pageX - 10) + 'px')
            .css('display', 'inline-block')
            .appendTo($('body'))
            .hide().fadeIn(); //this line doesn't break the code (anymore)
});

优化

    var $body=$(document.body);
    var $ps=$("#ptsAlert");
    var $tltp = $ps.find(">span");
    $body.on("click",".btn",function(event) {
       $tltp.clone(true, true)
            .css('top', (event.pageY - 75) + 'px')
            .css('left', (event.pageX - 10) + 'px')
            .css('display', 'inline-block')
            .appendTo($body)
            .hide().fadeIn();
      });