【问题标题】:Placing a floating info panel放置浮动信息面板
【发布时间】:2012-09-21 17:24:55
【问题描述】:

我正在使用 Jame Ferreira 的 Google Script:Enterprise Application Essentials 创建产品页面(第 5 章)。我创建了在页面上显示所有产品缩略图的应用程序,然后在用户将鼠标悬停时弹出带有更多详细信息的信息面板。它使用 CSS 来实现这种样式。

放置信息面板时出现问题。它仅在一个位置弹出,而不是绑定到与其关联的缩略图。

这是与信息面板相关的代码。我相信问题存在于最后几行的位置,但已经尝试了我能想到的一切:

function onInfo(e){
var app = UiApp.getActiveApplication();
var id = e.parameter.source;
for (var i in productDetails){
if(productDetails[i].id == id){
var r = 50;
var c = 0;
var infoPanel = app.createVerticalPanel().setSize('300px', '300px');
var horzPanel = app.createHorizontalPanel();
var image = app.createImage(productDetails[i].imageUrl).setHeight('100px');
var title = app.createLabel(productDetails[i].title);
horzPanel.add(image);
horzPanel.add(title);
var description = app.createLabel(productDetails[i].description);


infoPanel.add(horzPanel);
infoPanel.add(description);
applyCSS(infoPanel, _infoPanel);
applyCSS(image, _infoImage);
applyCSS(horzPanel, _infoBoxSeparator);
applyCSS(title, _infoTitle);
applyCSS(description, _infoDescription);

app.getElementById('infoGrid').setVisible(true)
.setWidget(0,0, infoPanel);
break;

}
c++
if (c == 3){
c = 0;
r = r+250;
}
switch (c)
{
case 0:
c=250;
break;
case 1:
c=500;
break;
case 2:
c=250;
break;
}
}

var _infoLocation =
{
"top":r+"px",
"left":c+"px",}

applyCSS(infoPanel, _infoLocation);

return app;
}

【问题讨论】:

    标签: css google-apps-script


    【解决方案1】:

    您可以使用e.parameter.xe.parameter.y 获取鼠标的位置,据此您可以定位信息面板

    infoPanel.setStyleAttribute('top',e.parameter.y)
        .setStyleAttribute('left',e.parameter.x).setStyleAttribute('zIndex','1')
        .setStyleAttribute('position','fixed');
    

    您可以根据需要在鼠标的 x 和 y 位置添加一些偏移来显示它。

    你在处理函数中得到的位置相关参数是

    e.parameter.x
    e.parameter.y
    
    e.parameter.clientX
    e.parameter.clientY
    
    e.parameter.screenX
    e.parameter.screenY
    

    【讨论】:

    • 好多了,但看起来好像,因为它是一个弹性表,X 和 Y 是相对于单元格设置的。因此,即使我在第三列,如果我一直在该列的左侧,信息面板也会一直显示在左侧。这是 Web 应用程序链接。 script.google.com/macros/s/…
    • @MartinK 抱歉,我没有尝试使用 flexTable。我已经更新了我的答案,请检查它。这可能会帮助你
    • 感谢您的更新!我已经尝试过,但是 .client 和 .screen 参数使任何面板都无法显示。将继续寻找解决方案。谢谢你的时间,your very useful site!当我通过 GAS 找到自己的方式时,这对我来说非常宝贵。
    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    相关资源
    最近更新 更多