Я работаю над программой визуализации хромосом.Эта программа позволяет пользователям выбирать хромосомы и просматривать их эволюцию.
В данный момент я пытаюсь добавить событие onclick к элементу SVG rect и не удается.Код ниже является одним из примеров многих, которые я пробовал.Мне абсолютно необходимо, чтобы это было в векторном формате, и это только промежуточный шаг.
На этом этапе программы используются два входных массива: один со списком имен хромосом, а второй со списком размеров,Этот раздел кода предназначен для отображения хромосом и позволяет пользователю выбирать те, которые ему интересны. Затем он отображает данные о хромосомах во втором div (текст только с href) и генерирует кнопку.После нажатия этой кнопки они получат интерактивное представление об эволюции хромосом с помощью недавно созданного SVG.
У меня большой успех в рисовании хромосом, но я не смог связать свои объекты с необходимымикод JavaScriptЯ относительно новичок в Javascript, поэтому любая помощь приветствуется.
Вот мой тестовый код:
<body>
<button onclick="Draw_Chromosomes()">
Start this baby up
</button>
<!-- This is where the refrence chromosomes are displayed -->
<div id="RefChromosomes_box" width=100%>
<svg id="RefChromosomes" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="300"></svg>
</div>
<!-- This is where the output is displayed -->
<div id="SELECTED_CHROMOSOMES" width=100%>
</div>
<script type="text/javascript">
var svgNS = "http://www.w3.org/2000/svg";
var Chromosomes = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","X","Y"];
var Positions = [248956422,242193529,198295559,190214555,181538259,170805979,159345973,145138636,138394717,133797422,135086622,133275309,114364328,107043718,101991189,90338345,83257441,80373285,58617616,64444167,46709983,50818468,156040895,57227415];
var Length = Positions.length;
var Largest= Math.max.apply(Math, Positions);
function Draw_Chromosomes(){
while (document.getElementById("RefChromosomes").lastChild) {
document.getElementById("RefChromosomes").removeChild(document.getElementById("RefChromosomes").lastChild);
}
//Make SVG element the proper size
var newidth=50+100*Length;
document.getElementById("RefChromosomes").style.width = newidth;
//Set the parameters for the first chromosome
var tempx=75;
//Draw the Chromosomes
for (var i = 0; i < Length; i++) {
var myChrome = document.createElementNS(svgNS,"rect");
var ID=Chromosomes[i] + "CHR";
myChrome.setAttributeNS(null,"id",ID);
myChrome.setAttributeNS(null,"x",tempx);
//set up X position for the next one
var tempx=tempx+100;
//Calculate the Y Top position (0 for maximum length, 250 for minimum)
// First get the length and divide it by max *250.
var CHRLENGTH=Positions[i]/Largest*250;
// set it for length
var endpos=250-CHRLENGTH;
myChrome.setAttributeNS(null,"y",endpos);
myChrome.setAttributeNS(null,"height",CHRLENGTH);
// set curviture
myChrome.setAttributeNS(null,"rx",15);
myChrome.setAttributeNS(null,"ry",15);
// set width (standard)
myChrome.setAttributeNS(null,"width",50);
// Set height
myChrome.setAttributeNS(null,"fill","blue");
myChrome.setAttributeNS(null,"stroke","black");
myChrome.setAttributeNS(null,"stroke-width",2);
// myChrome.setAttributeNS(null,"onclick","alert("bla")");
document.getElementById("RefChromosomes").appendChild(myChrome);
//document.getElementById(Chromosomes[i] + "CHR").dispatchEvent(new Event('click'));
// Add text Labels
var chrtext = document.createElementNS(svgNS,"text");
chrtext.setAttributeNS(null,"x",tempx-125);
chrtext.setAttributeNS(null,"y",280);
chrtext.setAttributeNS(null,"font-size","12px");
chrtext.setAttributeNS(null,"class","textlabel");
chrtext.innerHTML = "CHROMSOME " + Chromosomes[i];
document.getElementById("RefChromosomes").appendChild(chrtext);
}
}
}
</script>
</body>