我正在做一个项目,其中一个SVG插图是必不可少的了解网站的内容。
SVG文件应该是一个动画菜单,其中每个圆圈都是一个链接到另一个父页面的按钮。SVG文件作为原始代码插入到页面上。
我在寻求解决这些问题的帮助:
:focus模式的圆圈获得带有边框的样式。下面的片段带有来自我的测试站点的href链接。当href为#0并且我们不离开页面时,javascript可以工作,但这不是这个菜单的目的。
let allCircles = document.querySelectorAll("circle");
// Add an click handler to every circle that
// adds the class "active" to the clicked circle.
allCircles.forEach(element => {
element.addEventListener("click", clickHandler);
element.addEventListener("mouseover", mouseoverHandler);
element.addEventListener("mouseout", mouseoutHandler);
});
function clickHandler(evt) {
// Clear current selection (remove class "active" from any circle)
allCircles.forEach((circle) => circle.classList.remove("active"));
// Mark clicked circle selected
evt.target.classList.add("active");
// Clear any currently highlighted lines
clearHighlightedLines();
}
function mouseoverHandler(evt) {
let activeCircle = document.querySelector("circle.active");
document.querySelector("#pagetitle").innerHTML = evt.target.getAttribute('alt')
let hoveredCircle = evt.target;
if (activeCircle && (activeCircle != hoveredCircle)) {
// Get the line that has classes matching both the actibve and hovered circle
let line = document.querySelector("line." + activeCircle.id + "." + hoveredCircle.id);
// Add the class "highlight" to that line
if (line)
line.classList.add("highlight");
}
}
function mouseoutHandler(evt) {
clearHighlightedLines();
}
function clearHighlightedLines() {
// Find the line with class "highlight" (if any)
var line = document.querySelector("line.highlight");
// Remove the class "highlight"
if (line)
line.classList.remove("highlight");
}:root {
--color-1: #F2B705;
--color-2: #C30F0E;
--color-3: #264ABA;
--color-4: #009CD2;
--color-5: #E25727;
--color-11: #C29204;
--color-22: #990B0B;
--color-33: #172E73;
--color-44: #006B8E;
--color-55: #BA4620;
}
#c1 {
fill: var(--color-1);
}
#c2 {
fill: var(--color-2);
}
#c3 {
fill: var(--color-3);
}
#c4 {
fill: var(--color-4);
}
#c5 {
fill: var(--color-5);
}
.cls-7 {
fill: none
;
}
#c1.act {
stroke: red;
stroke-width: 21.5;
}
#c1.active {
stroke: var(--color-11);
stroke-width: 21.5;
}
#c2.active {
stroke: var(--color-22);
stroke-width: 21.5;
}
#c3.active {
stroke: var(--color-33);
stroke-width: 21.5;
}
#c4.active {
stroke: var(--color-44);
stroke-width: 21.5;
}
#c5.active {
stroke: var(--color-55);
stroke-width: 21.5;
}
#c1.circle:hover:not(.active) {
stroke: var(--color-11);
stroke-width: 21.5;
}
#c2.circle:hover:not(.active) {
stroke: var(--color-22);
stroke-width: 21.5;
}
#c3.circle:hover:not(.active) {
stroke: var(--color-33);
stroke-width: 21.5;
}
#c4.circle:hover:not(.active) {
stroke: var(--color-44);
stroke-width: 21.5;
}
#c5.circle:hover:not(.active) {
stroke: var(--color-55);
stroke-width: 21.5;
}
circle.btn1:hover:not(.active) {
stroke: var(--color-11);
stroke-width: 21.5;
}
circle.btn2:hover:not(.active) {
stroke: var(--color-22);
stroke-width: 21.5;
}
circle.btn3:hover:not(.active) {
stroke: var(--color-33);
stroke-width: 21.5;
}
circle.btn4:hover:not(.active) {
stroke: var(--color-44);
stroke-width: 21.5;
}
circle.btn5:hover:not(.active) {
stroke: var(--color-55);
stroke-width: 21.5;
}
line {
stroke: #c1c1c1;
stroke-width: 22;
}
line.highlight {
stroke: black;
}
.title {
text-align: center;
}
#pagetitle {
font-size: 4em;
}<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-10 -10 940 910">
<defs>
<style src="https://aau.gagarindigital.dk/wp-content/uploads/custom-css-js/svg-menu.css"></style>
</defs>
<polygon id="fem-kant" class="cls-7" points="456.29 7.49 898.87 329.05 729.82 849.33 182.76 849.33 13.71 329.05 456.29 7.49"/>
<line class="c3 c5" x1="656.32" y1="748.57" x2="133.5" y2="368.62"/>
<line class="c2 c4" x1="258.55" y1="747.22" x2="779.33" y2="368.43"/>
<line class="c1 c4" x1="258.55" y1="747.22" x2="457.43" y2="133.5"/>
<line class="c1 c3" x1="457.43" y1="133.5" x2="657.03" y2="748.57"/>
<line class="c5 c2" x1="133.5" y1="368.62" x2="779.33" y2="368.43"/>
<line class="c1 c2" x1="779.33" y1="368.43" x2="457.43" y2="133.5"/>
<line class="c2 c3" x1="779.33" y1="368.43" x2="657.03" y2="748.57"/>
<line class="c3 c4" x1="258.55" y1="747.22" x2="657.03" y2="748.57"/>
<line class="c4 c5" x1="258.55" y1="747.22" x2="133.5" y2="368.62"/>
<line class="c5 c1" x1="133.5" y1="368.62" x2="457.43" y2="133.5"/>
<a href="https://aau.gagarindigital.dk/trans-disciplinary">
<circle id="c1" class="btn1 btn" href="/trans-disciplinary" alt="Trans-disciplinary" cx="455.9" cy="133.5" r="133" data-Name="Trans-disciplinary" data-tabindex="1" />
</a>
<a href="https://aau.gagarindigital.dk/data-democracy">
<circle id="c2" class="btn2 btn" href="/data-democracy" alt="Data Democracy" cx="779.33" cy="368.43" r="133" data-Name="Data Democracy" data-tabindex="2" />
</a>
<a href="https://aau.gagarindigital.dk/cryptography-and-math">
<circle id="c3" class="btn3 btn" href="/cryptography-and-math" alt="Cryptography and Math" cx="656.32" cy="748.57" r="133" data-Name="Cryptography and Math" data-tabindex="3" />
</a>
<a href="https://aau.gagarindigital.dk/translation">
<circle id="c4" class="btn4 btn" href="/translation" alt="Translation" cx="256.18" cy="748.57" r="133" data-Name="Translation" data-tabindex="4" />
</a>
<a href="https://aau.gagarindigital.dk/application">
<circle id="c5" class="btn5 btn" href="/application" alt="Application" cx="133.5" cy="368.62" r="133" data-Name="Application" data-tabindex="5" />
</a>
<script type="text/javascript" src="https://aau.gagarindigital.dk/wp-content/uploads/custom-css-js/svg-menu.js"></script>
</svg>
<div class="title">
<p id="pagetitle"> </p>
</div>
发布于 2021-08-06 21:29:50
按下面的方式修改您的代码,它应该可以工作(如果我没有搞砸任何事情)。
更改clickHandler()如下:
function clickHandler(evt) {
// Activate the circle
activateCircle(evt.target.id);
// Remember which one was clicked, so that we can
// highlight the right one when we get to the subpage
sessionStorage.setItem("selectedMenuId", evt.target.id);
}
function activateCircle(elementId)
{
// Clear current selection (remove class "active" from any circle)
allCircles.forEach((circle) => circle.classList.remove("active"));
// Mark clicked circle selected
document.getElementById(elementId).classList.add("active");
// Clear any currently highlighted lines
clearHighlightedLines();
}在子菜单页面中只包含,包括这部分额外的JS。
//--- Initialise the menu -------------------------------------------
// Include this section on the subpages only!
document.querySelector("svg").addEventListener("load", () => {
// Get the id of the menu item that was selected on the last page
var activeId = sessionStorage.getItem("selectedMenuId");
// Activate that circle
if (activeId)
activateCircle(activeId);
});https://stackoverflow.com/questions/68621656
复制相似问题