dynamic-tag

Von $1

    Inhaltsverzeichnis
    keine Gliederung

    Version seit 20:34, 11 Aug 2026

    zu dieser Version.

    Zurück zu Versionshistorie.

    Zeige aktuelle Version

    /* TAG SPHERE - GROSSE SCHRIFT + AUTO-EXPLODE */
    #tagSphere {
        position: fixed;
        top: 50%;
        left: 20px;
        transform: translateY(-50%);
        width: 280px;
        height: 280px;
        z-index: 999;
        cursor: move;
        cursor: -webkit-grab;
        cursor: -moz-grab;
        opacity: 0;
        visibility: hidden;
        transition: opacity 0.4s ease, visibility 0.4s ease, width 0.7s cubic-bezier(0.68, -0.55, 0.265, 1.55), height 0.7s cubic-bezier(0.68, -0.55, 0.265, 1.55), top 0.7s ease, left 0.7s ease, transform 0.7s ease, z-index 0s;
        background: transparent;
        border: none;
        user-select: none;
        -webkit-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
    }
    
    #tagSphere.visible {
        opacity: 1;
        visibility: visible;
    }
    
    #tagSphere.exploded {
        width: 90vmin;
        height: 90vmin;
        max-width: 900px;
        max-height: 900px;
        top: 50vh;
        left: 50vw;
        transform: translate(-50%, -50%);
        z-index: 2147483647;
    }
    
    @media (orientation: landscape) and (min-width: 1024px) {
        #tagSphere.exploded {
            width: 80vw;
            height: 70vh;
            max-width: 1200px;
            max-height: 750px;
        }
    }
    
    #tagSphereBackdrop {
        position: fixed;
        top: 0;
        left: 0;
        width: 100vw;
        height: 100vh;
        background: rgba(0, 0, 0, 0.3);
        z-index: 2147483646;
        opacity: 0;
        visibility: hidden;
        transition: opacity 0.3s ease, visibility 0.3s ease;
    }
    
    #tagSphereBackdrop.visible {
        opacity: 1;
        visibility: visible;
    }
    
    @media (max-width: 768px) {
        #tagSphere {
            width: 250px;
            height: 250px;
            left: 50vw;
            top: 50vh;
            transform: translate(-50%, -50%);
        }
        
        #tagSphere.exploded {
            width: 100vw !important;
            height: 100vh !important;
            max-width: none !important;
            max-height: none !important;
            top: 50vh !important;
            left: 50vw !important;
            transform: translate(-50%, -50%) !important;
            background: rgba(255, 255, 255, 0.95);
        }
        
        #tagSphereBackdrop {
            display: none;
        }
    }
    
    #tagSphere.dragging {
        cursor: -webkit-grabbing !important;
        cursor: -moz-grabbing !important;
    }
    
    #tagSphere .close-btn {
        position: absolute;
        top: 20px;
        right: 20px;
        width: 56px;
        height: 56px;
        background: rgba(255, 255, 255, 0.95);
        backdrop-filter: blur(10px);
        -webkit-backdrop-filter: blur(10px);
        color: #CC0000;
        border: 2px solid rgba(204, 0, 0, 0.2);
        border-radius: 50%;
        font-size: 32px;
        font-weight: bold;
        line-height: 52px;
        text-align: center;
        cursor: pointer;
        z-index: 9999;
        opacity: 0;
        visibility: hidden;
        transition: all 0.3s ease;
        user-select: none;
        box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
    }
    
    #tagSphere.exploded .close-btn {
        opacity: 1 !important;
        visibility: visible !important;
    }
    
    #tagSphere .close-btn:hover {
        background: #CC0000;
        color: #FFFFFF;
        border-color: #CC0000;
        transform: scale(1.1);
        box-shadow: 0 6px 24px rgba(204, 0, 0, 0.4);
    }
    
    #tagSphere .close-btn:active {
        transform: scale(0.95);
    }
    
    #tagSphere .back-btn {
        position: absolute;
        top: 20px;
        left: 20px;
        width: 56px;
        height: 56px;
        background: rgba(255, 255, 255, 0.95);
        backdrop-filter: blur(10px);
        -webkit-backdrop-filter: blur(10px);
        color: #0066CC;
        border: 2px solid rgba(0, 102, 204, 0.2);
        border-radius: 50%;
        font-size: 28px;
        font-weight: bold;
        line-height: 52px;
        text-align: center;
        cursor: pointer;
        z-index: 9999;
        opacity: 0;
        visibility: hidden;
        transition: all 0.3s ease;
        user-select: none;
        box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
    }
    
    #tagSphere.mode-pages.exploded .back-btn {
        opacity: 1 !important;
        visibility: visible !important;
    }
    
    #tagSphere .back-btn:hover {
        background: #0066CC;
        color: #FFFFFF;
        border-color: #0066CC;
        transform: scale(1.1);
        box-shadow: 0 6px 24px rgba(0, 102, 204, 0.4);
    }
    
    #tagSphere .back-btn:active {
        transform: scale(0.95);
    }
    
    @media (orientation: landscape) and (min-width: 1024px) {
        #tagSphere.exploded .close-btn {
            top: 35px;
            right: 45px;
            width: 64px;
            height: 64px;
            font-size: 38px;
            line-height: 60px;
        }
        
        #tagSphere.exploded .back-btn {
            top: 35px;
            left: 45px;
            width: 64px;
            height: 64px;
            font-size: 34px;
            line-height: 60px;
        }
    }
    
    @media (orientation: portrait) {
        #tagSphere .close-btn {
            width: 72px;
            height: 72px;
            font-size: 40px;
            line-height: 68px;
            top: 25px;
            right: 25px;
        }
        
        #tagSphere .back-btn {
            width: 72px;
            height: 72px;
            font-size: 36px;
            line-height: 68px;
            top: 25px;
            left: 25px;
        }
    }
    
    @media (max-width: 768px) and (orientation: portrait) {
        #tagSphere .close-btn {
            width: 80px;
            height: 80px;
            font-size: 48px;
            line-height: 76px;
            top: 20px;
            right: 20px;
            box-shadow: 0 6px 24px rgba(0, 0, 0, 0.25);
        }
        
        #tagSphere .back-btn {
            width: 80px;
            height: 80px;
            font-size: 42px;
            line-height: 76px;
            top: 20px;
            left: 20px;
            box-shadow: 0 6px 24px rgba(0, 0, 0, 0.25);
        }
    }
    
    @media (max-width: 768px) and (orientation: landscape) {
        #tagSphere .close-btn {
            width: 64px;
            height: 64px;
            font-size: 36px;
            line-height: 60px;
        }
        
        #tagSphere .back-btn {
            width: 64px;
            height: 64px;
            font-size: 32px;
            line-height: 60px;
        }
    }
    
    #tagSphere .tag-item {
        position: absolute;
        padding: 18px 32px;
        white-space: nowrap;
        font-size: 20px;
        font-weight: 700;
        text-decoration: none;
        background: #FFFFFF;
        border: none;
        border-radius: 25px;
        cursor: pointer;
        min-width: 70px;
        text-align: center;
        box-shadow: 0 3px 10px rgba(0,0,0,0.15);
        transition: transform 0.2s ease, box-shadow 0.2s ease, color 0.2s ease, opacity 0.3s ease;
        pointer-events: auto;
        z-index: 100;
        user-select: none;
    }
    
    @media (max-width: 768px) {
        #tagSphere .tag-item {
            padding: 22px 38px;
            font-size: 22px;
            min-width: 95px;
        }
    }
    
    #tagSphere .tag-item.atom-0 { animation: float-0 4.2s ease-in-out infinite; }
    #tagSphere .tag-item.atom-1 { animation: float-1 5.1s ease-in-out infinite; }
    #tagSphere .tag-item.atom-2 { animation: float-2 4.7s ease-in-out infinite; }
    #tagSphere .tag-item.atom-3 { animation: float-3 5.5s ease-in-out infinite; }
    #tagSphere .tag-item.atom-4 { animation: float-4 4.9s ease-in-out infinite; }
    #tagSphere .tag-item.atom-5 { animation: float-5 5.3s ease-in-out infinite; }
    #tagSphere .tag-item.atom-6 { animation: float-6 4.5s ease-in-out infinite; }
    #tagSphere .tag-item.atom-7 { animation: float-7 5.8s ease-in-out infinite; }
    
    @keyframes float-0 {
        0%, 100% { transform: translate(0, 0) rotate(0deg); }
        25% { transform: translate(3px, -4px) rotate(1deg); }
        50% { transform: translate(-3px, -5px) rotate(-1deg); }
        75% { transform: translate(-4px, -2px) rotate(2deg); }
    }
    
    @keyframes float-1 {
        0%, 100% { transform: translate(0, 0) rotate(0deg); }
        25% { transform: translate(-3px, -5px) rotate(-1deg); }
        50% { transform: translate(4px, -3px) rotate(1deg); }
        75% { transform: translate(3px, -6px) rotate(-2deg); }
    }
    
    @keyframes float-2 {
        0%, 100% { transform: translate(0, 0) rotate(0deg); }
        25% { transform: translate(4px, -3px) rotate(2deg); }
        50% { transform: translate(-3px, -6px) rotate(-1deg); }
        75% { transform: translate(3px, -4px) rotate(1deg); }
    }
    
    @keyframes float-3 {
        0%, 100% { transform: translate(0, 0) rotate(0deg); }
        25% { transform: translate(-4px, -6px) rotate(-2deg); }
        50% { transform: translate(3px, -4px) rotate(1deg); }
        75% { transform: translate(-3px, -5px) rotate(-1deg); }
    }
    
    @keyframes float-4 {
        0%, 100% { transform: translate(0, 0) rotate(0deg); }
        25% { transform: translate(3px, -5px) rotate(1deg); }
        50% { transform: translate(-4px, -4px) rotate(-2deg); }
        75% { transform: translate(4px, -6px) rotate(2deg); }
    }
    
    @keyframes float-5 {
        0%, 100% { transform: translate(0, 0) rotate(0deg); }
        25% { transform: translate(-3px, -4px) rotate(-1deg); }
        50% { transform: translate(4px, -6px) rotate(2deg); }
        75% { transform: translate(-4px, -3px) rotate(-2deg); }
    }
    
    @keyframes float-6 {
        0%, 100% { transform: translate(0, 0) rotate(0deg); }
        25% { transform: translate(4px, -6px) rotate(2deg); }
        50% { transform: translate(-3px, -5px) rotate(-1deg); }
        75% { transform: translate(3px, -3px) rotate(1deg); }
    }
    
    @keyframes float-7 {
        0%, 100% { transform: translate(0, 0) rotate(0deg); }
        25% { transform: translate(-4px, -4px) rotate(-2deg); }
        50% { transform: translate(3px, -6px) rotate(1deg); }
        75% { transform: translate(-3px, -5px) rotate(-1deg); }
    }
    
    #tagSphere.mode-tags .tag-item {
        color: #0066CC;
    }
    
    #tagSphere.mode-tags .tag-item:hover {
        color: #0044AA;
        box-shadow: 0 6px 20px rgba(0,102,204,0.5);
        transform: scale(1.3) !important;
        z-index: 9998 !important;
    }
    
    #tagSphere.mode-pages .tag-item:hover {
        box-shadow: 0 6px 20px rgba(204,0,0,0.5);
        transform: scale(1.3) !important;
        z-index: 9998 !important;
    }
    
    (function(){var CFG={baseRadius:120,smallSize:280,smallSizeMobile:250,baseFontSize:20,baseFontSizeMobile:22,minFontPages:18,maxFontPages:38,minFontPagesMobile:20,maxFontPagesMobile:40,xFactorNormal:0.4,yFactorNormal:1.5,xFactorLandscape:0.9,yFactorLandscape:1.0,inactiveOpacity:0.4,verticalGradient:0.6,autoExplodeTrigger:0.3,scrollThreshold:1000,mobileBreak:768,landscapeBreak:1024,dragSense:0.008,moveThreshold:10};var c=null,backdrop=null,closeBtn=null,backBtn=null,items=[],angleX=0,angleY=0,exploded=false,drag=false,lastX=0,lastY=0,visible=false,loading=false,mode='tags',originalTags=[],isMobile=false,startX=0,startY=0,hasMoved=false,isActive=false,isLandscape=false,lastMouseX=0;function detectMobile(){isMobile=window.innerWidth<=CFG.mobileBreak}function detectLandscape(){isLandscape=window.innerWidth>window.innerHeight&&window.innerWidth>=CFG.landscapeBreak}function getViewportSize(){if(window.visualViewport){return{width:window.visualViewport.width,height:window.visualViewport.height}}return{width:window.innerWidth,height:window.innerHeight}}function createContainer(){backdrop=document.createElement('div');backdrop.id='tagSphereBackdrop';c=document.createElement('div');c.id='tagSphere';c.className='mode-tags';closeBtn=document.createElement('button');closeBtn.className='close-btn';closeBtn.textContent='\u00D7';closeBtn.title='Close';backBtn=document.createElement('button');backBtn.className='back-btn';backBtn.textContent='\u25C4';backBtn.title='Back to Tags';c.appendChild(closeBtn);c.appendChild(backBtn);var body=document.body||document.getElementsByTagName('body')[0];body.appendChild(backdrop);body.appendChild(c)}function extractTags(){var box=document.querySelector('.pageTags');if(!box)return;var links=box.getElementsByTagName('a');for(var i=0;i<links.length;i++){var>0&&link.href){items.push({text:txt,url:link.href,isTag:true,views:0,phi:0,theta:0})}}originalTags=items.slice();distributeItems()}function distributeItems(){var count=items.length;if(count===0)return;var goldenAngle=Math.PI*(3-Math.sqrt(5));for(var i=0;i<count;i++){var>0){c.removeChild(elements[0])}items=[]}function createElements(){for(var i=0;i<items.length;i++){var>CFG.scrollThreshold&&!visible){c.className+=' visible';visible=true}else if(scrollTop<=CFG.scrollThreshold&&visible){c.className=c.className.replace(/\s*visible/g,'');visible=false}}function activate(){isActive=true;position()}function deactivate(){isActive=false;position()}function down(e){if(loading)return;activate();startX=e.clientX||e.pageX||(e.touches?e.touches[0].clientX:0);startY=e.clientY||e.pageY||(e.touches?e.touches[0].clientY:0);lastX=startX;lastY=startY;hasMoved=false;drag=true;if(e.preventDefault)e.preventDefault();return false}function move(e){if(!drag)return;var x=e.clientX||e.pageX||(e.touches?e.touches[0].clientX:0);var y=e.clientY||e.pageY||(e.touches?e.touches[0].clientY:0);var deltaX=Math.abs(x-startX);var deltaY=Math.abs(y-startY);if(deltaX>CFG.moveThreshold||deltaY>CFG.moveThreshold){hasMoved=true;c.className+=' dragging';angleX+=(x-lastX)*CFG.dragSense;angleY+=(y-lastY)*CFG.dragSense;position()}lastX=x;lastY=y;if(e.preventDefault)e.preventDefault();return false}function up(e){if(!drag)return;drag=false;c.className=c.className.replace(/\s*dragging/g,'');if(!hasMoved){handleClick(e)}}function trackMouse(e){lastMouseX=e.clientX||e.pageX||0}function handleMouseEnter(e){activate();var mouseX=e.clientX||e.pageX||lastMouseX;var triggerPos=window.innerWidth*CFG.autoExplodeTrigger;if(!isMobile&&!exploded&&!drag&&mouseX<triggerpos){toggleexplode()}}function>

     
    Use the language selection below for English Utilise le sélecteur de langue ci-dessous pour français Per l'italiano, utilizzare la selezione della lingua qui sotto Schön sprichst du deutsch :-)