User:Wyn: Difference between revisions
(Replaced content with "Special Issue 25") Tags: Replaced Manual revert |
No edit summary |
||
Line 1: | Line 1: | ||
[[/Special Issue 25 |Special Issue 25]] | [[/Special Issue 25 |Special Issue 25]] | ||
<!DOCTYPE html> | |||
<html lang="en"> | |||
<head> | |||
<meta charset="UTF-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |||
<title>Personal Web of Interests</title> | |||
<style> | |||
body, html { | |||
margin: 0; | |||
padding: 0; | |||
height: 100%; | |||
font-family: Arial, sans-serif; | |||
background-color: #f0f0f0; | |||
} | |||
.container { | |||
width: 100%; | |||
height: 100%; | |||
position: relative; | |||
overflow: hidden; | |||
} | |||
.node { | |||
position: absolute; | |||
background-color: #fff; | |||
border: 2px solid #333; | |||
border-radius: 50%; | |||
width: 100px; | |||
height: 100px; | |||
display: flex; | |||
justify-content: center; | |||
align-items: center; | |||
text-align: center; | |||
cursor: pointer; | |||
transition: all 0.3s ease; | |||
} | |||
.node:hover { | |||
transform: scale(1.1); | |||
box-shadow: 0 0 15px rgba(0,0,0,0.2); | |||
} | |||
#svg-container { | |||
position: absolute; | |||
top: 0; | |||
left: 0; | |||
width: 100%; | |||
height: 100%; | |||
z-index: -1; | |||
} | |||
.info-panel { | |||
position: fixed; | |||
bottom: 20px; | |||
left: 20px; | |||
background-color: rgba(255, 255, 255, 0.9); | |||
padding: 15px; | |||
border-radius: 10px; | |||
box-shadow: 0 0 10px rgba(0,0,0,0.1); | |||
max-width: 300px; | |||
} | |||
</style> | |||
</head> | |||
<body> | |||
<div class="container" id="web-container"> | |||
<svg id="svg-container"></svg> | |||
</div> | |||
<div class="info-panel" id="info-panel"> | |||
<h2>Your Personal Web</h2> | |||
<p>Click on a node to learn more about each topic.</p> | |||
</div> | |||
<script> | |||
const interests = [ | |||
{id: 'publishing', name: 'Physical Publishing', x: 50, y: 30, info: 'Exploring the art of tangible media creation and distribution.'}, | |||
{id: 'archive', name: 'Art Labour Archive', x: 70, y: 70, info: 'Documenting and preserving the process and effort behind artistic creations.'}, | |||
{id: 'sound', name: 'Sound Recording', x: 30, y: 70, info: 'Capturing and manipulating audio for various creative projects.'}, | |||
{id: 'collective', name: 'Collective Organization', x: 20, y: 40, info: 'Studying and implementing collaborative structures in creative endeavors.'}, | |||
{id: 'assignments', name: 'Course Assignments', x: 80, y: 40, info: 'Current projects: 1. Media analysis (due 10/15) 2. Sound installation (due 11/20)'} | |||
]; | |||
function createNode(interest) { | |||
const node = document.createElement('div'); | |||
node.className = 'node'; | |||
node.id = interest.id; | |||
node.style.left = `${interest.x}%`; | |||
node.style.top = `${interest.y}%`; | |||
node.innerHTML = interest.name; | |||
node.onclick = () => showInfo(interest); | |||
document.getElementById('web-container').appendChild(node); | |||
} | |||
function createConnections() { | |||
const svg = document.getElementById('svg-container'); | |||
interests.forEach((interest, i) => { | |||
interests.slice(i + 1).forEach(other => { | |||
const line = document.createElementNS('http://www.w3.org/2000/svg', 'line'); | |||
line.setAttribute('x1', `${interest.x}%`); | |||
line.setAttribute('y1', `${interest.y}%`); | |||
line.setAttribute('x2', `${other.x}%`); | |||
line.setAttribute('y2', `${other.y}%`); | |||
line.setAttribute('stroke', '#333'); | |||
line.setAttribute('stroke-width', '1'); | |||
svg.appendChild(line); | |||
}); | |||
}); | |||
} | |||
function showInfo(interest) { | |||
const panel = document.getElementById('info-panel'); | |||
panel.innerHTML = ` | |||
<h2>${interest.name}</h2> | |||
<p>${interest.info}</p> | |||
`; | |||
} | |||
interests.forEach(createNode); | |||
createConnections(); | |||
</script> | |||
</body> | |||
</html> |
Revision as of 13:20, 19 September 2024
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Personal Web of Interests</title> <style> body, html { margin: 0; padding: 0; height: 100%; font-family: Arial, sans-serif; background-color: #f0f0f0; } .container { width: 100%; height: 100%; position: relative; overflow: hidden; } .node { position: absolute; background-color: #fff; border: 2px solid #333; border-radius: 50%; width: 100px; height: 100px; display: flex; justify-content: center; align-items: center; text-align: center; cursor: pointer; transition: all 0.3s ease; } .node:hover { transform: scale(1.1); box-shadow: 0 0 15px rgba(0,0,0,0.2); } #svg-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; } .info-panel { position: fixed; bottom: 20px; left: 20px; background-color: rgba(255, 255, 255, 0.9); padding: 15px; border-radius: 10px; box-shadow: 0 0 10px rgba(0,0,0,0.1); max-width: 300px; } </style>
</head> <body>
<svg id="svg-container"></svg>
Your Personal Web
Click on a node to learn more about each topic.
<script> const interests = [ {id: 'publishing', name: 'Physical Publishing', x: 50, y: 30, info: 'Exploring the art of tangible media creation and distribution.'}, {id: 'archive', name: 'Art Labour Archive', x: 70, y: 70, info: 'Documenting and preserving the process and effort behind artistic creations.'}, {id: 'sound', name: 'Sound Recording', x: 30, y: 70, info: 'Capturing and manipulating audio for various creative projects.'}, {id: 'collective', name: 'Collective Organization', x: 20, y: 40, info: 'Studying and implementing collaborative structures in creative endeavors.'}, {id: 'assignments', name: 'Course Assignments', x: 80, y: 40, info: 'Current projects: 1. Media analysis (due 10/15) 2. Sound installation (due 11/20)'} ];
function createNode(interest) { const node = document.createElement('div'); node.className = 'node'; node.id = interest.id; node.style.left = `${interest.x}%`; node.style.top = `${interest.y}%`; node.innerHTML = interest.name; node.onclick = () => showInfo(interest); document.getElementById('web-container').appendChild(node); }
function createConnections() { const svg = document.getElementById('svg-container'); interests.forEach((interest, i) => { interests.slice(i + 1).forEach(other => { const line = document.createElementNS('http://www.w3.org/2000/svg', 'line'); line.setAttribute('x1', `${interest.x}%`); line.setAttribute('y1', `${interest.y}%`); line.setAttribute('x2', `${other.x}%`); line.setAttribute('y2', `${other.y}%`); line.setAttribute('stroke', '#333'); line.setAttribute('stroke-width', '1'); svg.appendChild(line); }); }); }
function showInfo(interest) { const panel = document.getElementById('info-panel'); panel.innerHTML = `
${interest.name}
${interest.info}
`; }
interests.forEach(createNode); createConnections(); </script>
</body> </html>