I have a round div container with several divs with text along its circumference. I need to move text divs inside and outside the field of view in a circle in any direction in the scroll.
I selected and created a circular container div with d3.js and placed it in a smaller wrapper div with overflow-y set to auto.
<div id="circle-out-container-wrapper"><div id="circle-out-container"></div></div>
var radius = Math.floor(document.documentElement.clientHeight * 1.5);
d3.select('#circle-out-container-wrapper')
.style('overflow-y', 'auto')
.style('overflow-x', 'hidden')
.style('width', '80%')
.style('height', '400px')
.style('left', '0')
.style('top', '0')
.style('position', 'absolute');
d3.select('#circle-out-container')
.style('background-color', 'transparent')
.style('position', 'absolute')
.style('box-sizing', 'border-box')
.style('display', 'block')
.style('border', '1px solid #bce8f1')
.style('border-radius', '50%')
.style('width', (radius * 2) + "px")
.style('height', (radius * 2) + "px")
.style('left', Math.floor(-(radius * 5) / 3) + "px")
.style('top', Math.floor(-(radius * 2) / 3) + "px");
Then I add text divs and position them with the transform.
var params = [];
for (var i = 30; i >= 0; i--) {
params.push(i);
}
var nums = d3.select("#circle-out-container")
.selectAll("div.nums")
.data(params)
.enter()
.append("div")
.attr("class", "circle")
.style("transform", function(d, i) {
var angle = 20 - (i + 1) * (70 / (params.length + 1));
return "rotate(" + angle + "deg) translate(" + radius + "px, 0) rotate(" + -angle + "deg)";
})
.text(function(d) { return d });
This is how I look at text divs:
$('#circle-out-container-wrapper').scroll(function() {
b.style("transform", function(d, i) {
var scroll = $('#circle-out-container-wrapper').scrollTop();
var angle = scroll - (i + 1) * (40 / (params.length + 1));
return "rotate(" + angle + "deg) translate(" + radius + "px, 0) rotate(" + -angle + "deg)";
})
});
The container circle should be static while only half of it is displayed. The moment the scroll of text divs moves, but you also scroll the circular container div and the displayed arc changes. How to keep everything in place and move only text divs in a circular path when scrolling?
: http://jsfiddle.net/00drii/etnkLkL3/3/ .