Преобразовать список UL в круговой / круговой список - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь преобразовать инфографическое изображение во что-то редактируемое в HTML / JS / CSS.

Я хотел бы сделать так же близко, как пример изображения. Мне нужно, чтобы он был достаточно гибким, чтобы не передавать CSS-координаты каждого элемента, чтобы его можно было редактировать через администратор (добавить / удалить).

enter image description here

Как можно ближе, я использовал TweenMax в примере, который я нашел в сети. Но я застрял. Мой самый большой вопрос - как расположить текст в соответствии с областью, в которой он находится (если круг находится справа, выровняйте заголовок вправо, если он слева, сделайте то же самое, выравнивая по левому краю).

function radiallist(trgt) {
      		var itemAmount = $(trgt).find('.radiallist-item').length;
      		var angle = 0,
        		currItem;
      		var itemStartDist = trgt.width() * 2;
    		for (i = 0; i < itemAmount; i++) {
    			currItem = $(trgt).find('.radiallist-item:nth-child(' + (i + 1) + ')');
    			angle = (Math.PI * 2 / itemAmount) * i;
    			x = itemStartDist * Math.cos(angle) - (currItem.width() / 2);
    			y = itemStartDist * Math.sin(angle) - (currItem.height() / 2);
    			TweenMax.to(currItem, 0, {
    				x: x,
    				y: y
    			});
    		}
      		radiallistItemPos($('.radiallist'));
    	}
    	radiallist($('.radiallist'));

    	function radiallistItemPos(trgt) {
    		var itemAmount = $(trgt).find('.radiallist-item').length;
    		var angle = 0,
    		currItem;
    		var itemEndDist = 100 * itemAmount/8;
    		for (i = 0; i < itemAmount; i++) {
    			currItem = $(trgt).find('.radiallist-item:nth-child(' + (i + 1) + ')');
    			angle = (Math.PI * 2 / itemAmount) * i;
    			x = itemEndDist * Math.cos(angle) - (currItem.width() / 2);
    			y = itemEndDist * Math.sin(angle) - (currItem.height() / 2);
    			TweenMax.to(currItem, 2, {
    				x: x,
    				y: y,
    				alpha: 1
    			});
    		}
    	}
.radiallist {
    		position:absolute;
    		height:100%;
    		width:100%;
    		top:0;
    		left:0;
    		overflow:hidden;
    	}
    	.radiallist .radiallist-btn {
    		position:relative;
    		height:330px;
    		width:330px;
    		left:50%;
    		top:50%;
    		margin-top:-165px;
    		margin-left:-165px;
    		z-index:2;
    		text-align:center;
    		border:3px dotted #CCC;
    		border-radius:165px;
    	}
    	.radiallist .radiallist-btn img {
    		position:absolute;
    		top:50%;
    		left:50%;
    		margin-left:-107px;
    		margin-top:-31px;
    	}
    	.radiallist .radiallist-items {
    		position:absolute;
    		left: 50%;
    		top: 50%;
    		margin:0;
    		list-style-type:none;
    		padding:0;
    	}
    	.radiallist .radiallist-item {
    		position:absolute;
    		background:url(https://i.imgur.com/LMgR3Pe.png) no-repeat center;
    		z-index:1;
    		text-align:right;
    		font-family:'Din';
    		font-size:14px;
    		color:#777;
    		font-weight:bold;
    		text-transform:uppercase;
    		white-space:nowrap;
    	}
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-migrate/3.0.1/jquery-migrate.min.js"></script>
    <script defer src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"></script>
    <script defer src="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.16.1/TweenMax.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
    <section id="conteudo">
    	<div class="container">
    		<div class="radiallist">
    			<div class="radiallist-btn"></div>
    			<ul class="radiallist-items">
    				<li class="radiallist-item">Televisões</li>
    				<li class="radiallist-item">Telas Touch</li>
    				<li class="radiallist-item">Notebooks</li>
    				<li class="radiallist-item">Tablets</li>
    				<li class="radiallist-item">Impressoras</li>
    				<li class="radiallist-item">Estruturas Box Truss</li>
    				<li class="radiallist-item">Backdrops</li>
    				<li class="radiallist-item">Palcos</li>
    				<li class="radiallist-item">Caixas de som</li>
    				<li class="radiallist-item">Microfones</li>
    				<li class="radiallist-item">Iluminação</li>
    				<li class="radiallist-item">Filmadoras</li>
    				<li class="radiallist-item">Máquinas fotográficas</li>
    				<li class="radiallist-item">Climatizadores</li>
    				<li class="radiallist-item">Rádios</li>
    				<li class="radiallist-item">Totens Carregadores</li>
    				<li class="radiallist-item">Tendas</li>
    				<li class="radiallist-item">Geradores de Energia</li>
    				<li class="radiallist-item">Vídeo-games</li>
    				<li class="radiallist-item">Equipamentos para transmissão</li>
    				<li class="radiallist-item">Unifilas</li>
    				<li class="radiallist-item">Pulpitos</li>
    				<li class="radiallist-item">Máquinas de neve</li>
    				<li class="radiallist-item">Máquinas de fumaça</li>
    				<li class="radiallist-item">Máquinas de gelo seco</li>
    				<li class="radiallist-item">Projetores</li>
    			</ul>
    		</div>
    	</div>
    </section>

Может ли кто-нибудь подсказать мне об этом?

...