如何在点击页面其他地方的按钮时打开 TippyJS 工具提示?
How to open TippyJS tooltip on click of a button elsewhere on the page?
我试图在单击按钮时打开提示工具提示,而不是将工具提示附加到此按钮,而是在它自己的位置打开它。
在我的示例中,我的菜单中有一个添加到购物车按钮和一个购物车图标,在提示工具提示中显示了购物车。我希望在单击“添加到购物车”按钮时也显示此工具提示。
我试图创建一个我的 tippy 实例并将其与 show()
方法一起使用,但我没有成功。
举个简单的例子:有element1和element2。 Element1 的 tippy 代码运行良好,但现在我还想在单击 element2 时触发 element1 上的 tippy。
我的代码:
const tippyinstance = tippy('.carttip', {
theme: 'blue',
trigger: 'click',
allowHTML: true,
animation: 'scale-subtle',
maxWidth: 400,
boundary: 'viewport',
interactive: true,
content: function (reference) {
return reference.querySelector('.tooltipcontent');
},
onShow(instance) {
refreshcart(true, instance);
}
});
我的加入购物车代码:
$('body').on('click', ".addtocart", function (e, tippyinstance) {
e.preventDefault();
var form_data = $(".addtocartform").serialize();
$.ajax({
type:'post',
url:"includes/addtocart.php",
data: { form_data: form_data },
success:function(data){
tippyinstance.show();
},
});
});
我也有这个功能,总是刷新工具提示的内容,所以显示最新的信息:
function refreshcart(force, tippyInstance) {
$.ajax({
type: 'post',
url: 'includes/refreshcart.php',
data: ({}),
success: function(data){
$('body #headercart').empty().append(data);
tippyInstance.popperInstance.update();
}
});
}
我尝试将 tippyinstance
传递到我的添加到购物车功能,但我一直收到此错误:
Uncaught TypeError: Cannot read properties of undefined (reading 'show')
如果您查看文档,Show 是正确的方法:https://atomiks.github.io/tippyjs/v6/methods/ 所以它可能找不到我的 tippy 实例。这是为什么?
定期打开工具提示效果很好(单击购物车图标),只是在单击“添加到购物车”按钮时不起作用。
在我的点击函数中记录 console.log({tippyinstance})
:
{tippyinstance: Array(1)}
tippyinstance: Array(1)
0: {id: 1, reference: div.carttip.module-icon.module-icon-cart, popper: div#tippy-1, popperInstance: null, props: {…}, …}
length: 1
[[Prototype]]: Array(0)
[[Prototype]]: Object
我想你在找 triggerTarget
属性:
tippy(targets, {
triggerTarget: null, // default (reference is used)
triggerTarget: someElement, // Element
triggerTarget: [someElement1, someElement2], // Element[]
});
你可以这样使用:
tippy('.add', {content: 'locate the cart'});
tippy('.cart', {
triggerTarget: [...document.querySelectorAll('.add')],
trigger: 'click',
content: ' Hey! ',
animation: 'tada',
theme: 'forest'
});
tippy('.cart', {content: 'checkout'});
body {
background: wheat;
}
.cart {
position: fixed;
right: 5rem;
bottom: 2rem;
color: green;
}
/* add custom animation */
.tippy-box[data-animation=tada] {
animation: tada 1s linear 3;
filter: contrast(1.5);
}
/* add custom theme */
.tippy-box[data-theme~='forest'] {
background: linear-gradient(90deg, #6bbb62, #c4e466);
color: black;
}
.tippy-box[data-theme~='forest']>.tippy-arrow::before {
border-top-color: #81df76;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.css" />
<script src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.min.js"></script>
<script src="https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.js"></script>
<div class="cart">
<i class="fas fa-shopping-cart"></i>
</div>
Item 1: <button class="add">Add</button><br><br> Item 2: <button class="add">Add</button>
我试图在单击按钮时打开提示工具提示,而不是将工具提示附加到此按钮,而是在它自己的位置打开它。
在我的示例中,我的菜单中有一个添加到购物车按钮和一个购物车图标,在提示工具提示中显示了购物车。我希望在单击“添加到购物车”按钮时也显示此工具提示。
我试图创建一个我的 tippy 实例并将其与 show()
方法一起使用,但我没有成功。
举个简单的例子:有element1和element2。 Element1 的 tippy 代码运行良好,但现在我还想在单击 element2 时触发 element1 上的 tippy。
我的代码:
const tippyinstance = tippy('.carttip', {
theme: 'blue',
trigger: 'click',
allowHTML: true,
animation: 'scale-subtle',
maxWidth: 400,
boundary: 'viewport',
interactive: true,
content: function (reference) {
return reference.querySelector('.tooltipcontent');
},
onShow(instance) {
refreshcart(true, instance);
}
});
我的加入购物车代码:
$('body').on('click', ".addtocart", function (e, tippyinstance) {
e.preventDefault();
var form_data = $(".addtocartform").serialize();
$.ajax({
type:'post',
url:"includes/addtocart.php",
data: { form_data: form_data },
success:function(data){
tippyinstance.show();
},
});
});
我也有这个功能,总是刷新工具提示的内容,所以显示最新的信息:
function refreshcart(force, tippyInstance) {
$.ajax({
type: 'post',
url: 'includes/refreshcart.php',
data: ({}),
success: function(data){
$('body #headercart').empty().append(data);
tippyInstance.popperInstance.update();
}
});
}
我尝试将 tippyinstance
传递到我的添加到购物车功能,但我一直收到此错误:
Uncaught TypeError: Cannot read properties of undefined (reading 'show')
如果您查看文档,Show 是正确的方法:https://atomiks.github.io/tippyjs/v6/methods/ 所以它可能找不到我的 tippy 实例。这是为什么?
定期打开工具提示效果很好(单击购物车图标),只是在单击“添加到购物车”按钮时不起作用。
在我的点击函数中记录 console.log({tippyinstance})
:
{tippyinstance: Array(1)}
tippyinstance: Array(1)
0: {id: 1, reference: div.carttip.module-icon.module-icon-cart, popper: div#tippy-1, popperInstance: null, props: {…}, …}
length: 1
[[Prototype]]: Array(0)
[[Prototype]]: Object
我想你在找 triggerTarget
属性:
tippy(targets, {
triggerTarget: null, // default (reference is used)
triggerTarget: someElement, // Element
triggerTarget: [someElement1, someElement2], // Element[]
});
你可以这样使用:
tippy('.add', {content: 'locate the cart'});
tippy('.cart', {
triggerTarget: [...document.querySelectorAll('.add')],
trigger: 'click',
content: ' Hey! ',
animation: 'tada',
theme: 'forest'
});
tippy('.cart', {content: 'checkout'});
body {
background: wheat;
}
.cart {
position: fixed;
right: 5rem;
bottom: 2rem;
color: green;
}
/* add custom animation */
.tippy-box[data-animation=tada] {
animation: tada 1s linear 3;
filter: contrast(1.5);
}
/* add custom theme */
.tippy-box[data-theme~='forest'] {
background: linear-gradient(90deg, #6bbb62, #c4e466);
color: black;
}
.tippy-box[data-theme~='forest']>.tippy-arrow::before {
border-top-color: #81df76;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.css" />
<script src="https://unpkg.com/@popperjs/core@2/dist/umd/popper.min.js"></script>
<script src="https://unpkg.com/tippy.js@6/dist/tippy-bundle.umd.js"></script>
<div class="cart">
<i class="fas fa-shopping-cart"></i>
</div>
Item 1: <button class="add">Add</button><br><br> Item 2: <button class="add">Add</button>