jquery ui 的拉斐尔行为
raphael behavior with jquery ui
我正在尝试使用 Raphael 和 jQuery UI。我的问题的一个非常简单的例子涉及一个简单的按钮,它打开一个 jQuery 对话框。
在该对话框中,我正在使用 Raphael 纸从数组中绘制文本列表,并覆盖一些分配有点击事件的透明矩形。
我不知道如何为这个例子创建一个 jsfiddle,因此在下面粘贴我的代码。
首先,html部分:
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui.min.css"/>
<link rel="stylesheet" type="text/css" href="css/jquery-ui.theme.min.css"/>
<script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.11.3.min.js"></script>
<script type="text/javascript" src="js/raphael-2.1.2.min.js"></script>
<script type="text/javascript" src="js/jscode.js"></script>
</head>
<body>
<div><button id="fireit">Open</button></div>
<div id="content"></div>
</body>
</html>
接下来,jscode.js部分:
$( function() {
$("#content").dialog({
position: {my: "left top", at: "left+5px top+40px", of: window},
title: "A title",
width: 350,
height: 375,
resizable: false,
closeOnEscape: true,
autoOpen: false
});
var paper_content = Raphael("content", 300, 30);
var info = ["foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo"];
paper_content.setStart();
var texts = paper_content.setFinish();
function print_texts() {
texts.remove();
var i;
var row = 10;
paper_content.setStart();
for (i = 0; i < info.length; i++) {
paper_content.text(25, row, info[i])
.attr({'text-anchor': 'start', 'font-size': '14px'});
row += 20;
}
row = 10;
var somerect;
for (i = 0; i < info.length; i++) {
somerect = paper_content
.rect(5, row - 10, 500, 20)
.attr({fill: "#acadea", 'stroke-opacity': '0.5', 'fill-opacity': 0.5});
somerect.id = i;
somerect.click(function() {
alert(info[this.id]);
})
row += 20;
}
texts = paper_content.setFinish();
}
$("#fireit").click(function() {
print_texts();
$(paper_content.canvas).height(texts.getBBox().height + 20);
$("#content").dialog("open");
})
});
点击函数触发 print_texts() 函数,由于 Raphael 打印的内容比纸高,纸 canvas 被调整大小。
按下按钮时出现问题:Raphael 打印的文本不在应有的位置...!
第二次单击该按钮会奇迹般地以正确的顺序排列它们。
现在的问题是:我该如何克服这个问题?我需要从第一次点击开始就得到正确的顺序。
在此先感谢您的任何提示,
阿德里安
和往常一样,一旦得到一个最小的例子,答案就会自动弹出。
重点是首先打开对话框,然后才打开 运行 其他说明:
$("#fireit").click(function() {
$("#content").dialog("open");
print_texts();
$(paper_content.canvas).height(texts.getBBox().height + 20);
})
我正在尝试使用 Raphael 和 jQuery UI。我的问题的一个非常简单的例子涉及一个简单的按钮,它打开一个 jQuery 对话框。
在该对话框中,我正在使用 Raphael 纸从数组中绘制文本列表,并覆盖一些分配有点击事件的透明矩形。
我不知道如何为这个例子创建一个 jsfiddle,因此在下面粘贴我的代码。
首先,html部分:
<html>
<head>
<meta charset='utf-8'>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="css/jquery-ui.min.css"/>
<link rel="stylesheet" type="text/css" href="css/jquery-ui.theme.min.css"/>
<script type="text/javascript" src="js/jquery-2.1.3.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.11.3.min.js"></script>
<script type="text/javascript" src="js/raphael-2.1.2.min.js"></script>
<script type="text/javascript" src="js/jscode.js"></script>
</head>
<body>
<div><button id="fireit">Open</button></div>
<div id="content"></div>
</body>
</html>
接下来,jscode.js部分:
$( function() {
$("#content").dialog({
position: {my: "left top", at: "left+5px top+40px", of: window},
title: "A title",
width: 350,
height: 375,
resizable: false,
closeOnEscape: true,
autoOpen: false
});
var paper_content = Raphael("content", 300, 30);
var info = ["foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo", "foo"];
paper_content.setStart();
var texts = paper_content.setFinish();
function print_texts() {
texts.remove();
var i;
var row = 10;
paper_content.setStart();
for (i = 0; i < info.length; i++) {
paper_content.text(25, row, info[i])
.attr({'text-anchor': 'start', 'font-size': '14px'});
row += 20;
}
row = 10;
var somerect;
for (i = 0; i < info.length; i++) {
somerect = paper_content
.rect(5, row - 10, 500, 20)
.attr({fill: "#acadea", 'stroke-opacity': '0.5', 'fill-opacity': 0.5});
somerect.id = i;
somerect.click(function() {
alert(info[this.id]);
})
row += 20;
}
texts = paper_content.setFinish();
}
$("#fireit").click(function() {
print_texts();
$(paper_content.canvas).height(texts.getBBox().height + 20);
$("#content").dialog("open");
})
});
点击函数触发 print_texts() 函数,由于 Raphael 打印的内容比纸高,纸 canvas 被调整大小。
按下按钮时出现问题:Raphael 打印的文本不在应有的位置...!
第二次单击该按钮会奇迹般地以正确的顺序排列它们。
现在的问题是:我该如何克服这个问题?我需要从第一次点击开始就得到正确的顺序。
在此先感谢您的任何提示, 阿德里安
和往常一样,一旦得到一个最小的例子,答案就会自动弹出。 重点是首先打开对话框,然后才打开 运行 其他说明:
$("#fireit").click(function() {
$("#content").dialog("open");
print_texts();
$(paper_content.canvas).height(texts.getBBox().height + 20);
})