0

我在用jQuery Tipsy 插件,我想知道是否可以动态更改重力。

我一直在尝试但没有成功: //jsfiddle.net/YSYuu/

无论如何,这是代码:

$('[data-demo]').tipsy({
    title: 'data-demo',
    gravity: 'n'
});

//changing it on real time
$('.demo').click(function () {
    $('[data-demo]').tipsy({
        title: 'data-demo',
        gravity: 's'
    });
    alert("Gravity changed");
});
4

3 回答 3

2

问题在于,tipsy 在特定元素上绑定事件以提高速度,并且在插件中没有取消绑定事件。你可以做的是克隆你的元素;这可能是唯一的方法。(插件限制)。

这是解决方案:

$('.text').tipsy({
    title: 'data',
    gravity: 's'
})


$(".demo").on("click", function(){
    $(".text").remove().clone().appendTo("body").tipsy({
       title: 'data',
       gravity: 'n'
    })

});

JSFiddle:http: //jsfiddle.net/javascript/YSYuu/3/

当然,您会附加到它所在的完全相同的位置。要获取其位置,您可以使用$(this).parent().children().index(this)然后附加$("#whatever li:eq(2)").after("...");

于 2013-07-16T11:35:22.170 回答
1

创建工具提示后,您可以通过访问 Tipsy 的配置数据来更改重力:

$('[data-demo]').data('tipsy').options.gravity = 's';

我测试gravitytitle取得了很好的结果:http: //jsfiddle.net/mikeular/h5y14qe3/6/

于 2015-03-26T18:34:02.947 回答
1

克隆元素,然后删除原始元素。并添加改变重力的克隆,如下所示:

$('.demo').click(function () {
    var el = $('[data-demo]');
    var clone = $(el.clone());
    el.before(clone);
    el.remove();
    clone.tipsy({
        title: 'data-demo',
        gravity: 's'
    });
    alert("Gravity changed");
});

jsFiddle

于 2013-07-16T11:24:26.920 回答