Массивы jquery
Есть код
<div id="pager_slider">
<section class="page1">
</section>
<section class="page2">
</section>
<section class="page3">
<h2>Grafic Design3</h2>
<p class="b_text"></p>
<p class="s_text"> </p>
</section>
<section class="page4">
</section>
</div>
<div id="progress_bar">
<div id="circles">
<div class="circle">
<strong></strong>
</div>
</div>
<div class="circle">
<strong></strong>
</div>
<div class="circle">
<strong></strong>
</div>
</div>
$(function(){
$('#pager_slider').cycle({
fx: 'scrollDown',
timeout: 0,
speed: 1000,
easing: 'easeOutCubic',
pager: '#nav_slider'
});
$(document.body).on("click", "#nav_slider a[href^='#']", function(){
$('#nav_slider a').addClass('noActive').removeClass('activeSlide');
$(this).addClass('activeSlide').removeClass('noActive');
});
$('#nav_slider a').addClass('detailsIcon').text('');
});
// circle progressbar for our_services
$(function(){
var c4 = $('.circle');
c4.circleProgress({
startAngle: -Math.PI /2 * 8 ,
lineCap: 'round',
value: c4.data("value"),
thickness: 4,
fill: {color: '#19bd9a' },
emptyFill: 'rgba(4, 115, 120, 1)'
}).on('circle-animation-progress', function(event, progress, stepValue) {
$(this).find('strong').text((100 * stepValue).toFixed(0) + '%');
});
});
var progressBarArray1 = ["0.75","0.36","0.21"]
var progressBarArray2 = ["0.25","0.43","0.33"]
var progressBarArray3 = ["0.40","0.75","0.54"]
var progressBarArray4 = ["0.75","0.78","0.46"]
Как сделать, чтобы по клику в навигации, загружались к div.circle добавлялся атрибут data-value и загружались элементы из массива. Т.е я нажимаю на первую кнопку в nav он загружает из первого массива значения и расставляет к первому элементу с классом circle первый элемент массива, ко второму второй, к третьему третий |
Artem_A,
а если на вторую кнопку в nav нажали , то как должно быть? |
Mess4me,
из второго массива загружаются элементы и вставляются таким же образом |
Artem_A,
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>
<nav id="nav">
<ul>
<li>First</li>
<li>Second</li>
<li>Third</li>
</ul>
</nav>
<div id="pager_slider">
<section class="page1">
</section>
<section class="page2">
</section>
<section class="page3">
<h2>Grafic Design3</h2>
<p class="b_text"></p>
<p class="s_text"> </p>
</section>
<section class="page4">
</section>
</div>
<div id="progress_bar">
<div id="circles">
<div class="circle">
<strong></strong>
</div>
</div>
<div class="circle">
<strong></strong>
</div>
<div class="circle">
<strong></strong>
</div>
</div>
<script>
$(function(){
/*
$(document.body).on("click", "#nav_slider a[href^='#']", function(){
$('#nav_slider a').addClass('noActive').removeClass('activeSlide');
$(this).addClass('activeSlide').removeClass('noActive');
});
$('#nav_slider a').addClass('detailsIcon').text('');*/
});
var progressBarArray1 = ["0.75","0.36","0.21"];
var progressBarArray2 = ["0.25","0.43","0.33"];
var progressBarArray3 = ["0.40","0.75","0.54"];
var progressBarArray4 = ["0.75","0.78","0.46"];
var progressBarArrays = [progressBarArray1,progressBarArray2,progressBarArray3,progressBarArray4];
// circle progressbar for our_services
$(function(){
var circles = $('.circle');
var lis = $('#nav li');
lis.on('click', function (li) {
var inx = $(this).index();
var i =0;
[].forEach.call(circles, function (el) {
$(el).attr('data-value',progressBarArrays[inx][i++])
});
})
});
</script>
</body>
</html>
|
Mess4me,
Да! он добавляет данные масива как надо, но в прогресс баре нет изменений 0% стоит
var progressBarArray1 = ["0.75","0.36","0.21"];
var progressBarArray2 = ["0.25","0.43","0.33"];
var progressBarArray3 = ["0.40","0.75","0.54"];
var progressBarArray4 = ["0.75","0.78","0.46"];
var progressBarArrays = [progressBarArray1,progressBarArray2,progressBarArray3,progressBarArray4];
$(function(){
var circles = $('.circle');
var lis = $('#nav_slider a');
lis.on('click', function (a) {
var inx = $(this).index();
var i =0;
[].forEach.call(circles, function (el) {
$(el).attr('data-value',progressBarArrays[inx][i++])
});
});
circles.circleProgress({
startAngle: -Math.PI /2 * 8 ,
size: 130,
lineCap: 'round',
value: circles.data("value"),
thickness: 4,
fill: {color: '#19bd9a' },
emptyFill: 'rgba(4, 115, 120, 1)'
}).on('circle-animation-progress', function(event, progress, stepValue) {
$(this).find('strong').text((100 * stepValue).toFixed(0) + '%');
});
});
|
Mess4me,
и чтобы первый массив загружался когда я мышкой доскролю до прогресс бара) Это возможно? |
Mess4me,
У вас есть идеи? |
|
Mess4me,
Чтобы он запускался, когда до него скролишь я сделал но так как значения не загружаются из первого массива при загрузки, то получаются 0% в прогрессбаре, и нажимая все равно прогресс бар не меняется, хотя атрибут data-value меняется |
Artem_A,
Цитата:
|
Mess4me,
он все подставляет, но прогресс бар не работает |
Mess4me,
и да вместо value: circles.data("value"), подставлял число и оно работало |
Mess4me,
А если сделать вручную, то все они загрузятся со значением 0.3, а не 0.3, 0.4, 0.5
<div id="circles">
<div class="circle" data-value="0.3">
<strong></strong>
</div>
<div class="circle" data-value="0.4">
<strong></strong>
</div>
<div class="circle" data-value="0.5">
<strong></strong>
</div>
|
Mess4me,
так, последнее решил, теперь чтобы из массива работали нужно |
Artem_A,
теперь
var newCicles = document.querySelectorAll('.circle');
и в цикле
c4.circleProgress({
startAngle: -Math.PI /2 * 8 ,
lineCap: 'round',
value: c4.data("value"),
thickness: 4,
fill: {color: '#19bd9a' },
emptyFill: 'rgba(4, 115, 120, 1)'
}).on('circle-animation-progress', function(event, progress, stepValue) {
$(this).find('strong').text((100 * stepValue).toFixed(0) + '%');
});
});
|
Artem_A,
теперь так наверное
var newCicles = document.querySelectorAll('.circle');
newCicles.forEach(function (el) {
el.circleProgress({
startAngle: -Math.PI /2 * 8 ,
lineCap: 'round',
value: el.getAttribute('data-value'),
thickness: 4,
fill: {color: '#19bd9a' },
emptyFill: 'rgba(4, 115, 120, 1)'
}).on('circle-animation-progress', function(event, progress, stepValue) {
$(this).find('strong').text((100 * stepValue).toFixed(0) + '%');
});
});
|
в общем мы сделали, вот код
var progressBarArray1 = ["0.75","0.36","0.21"];
var progressBarArray2 = ["0.25","0.43","0.33"];
var progressBarArray3 = ["0.40","0.75","0.54"];
var progressBarArray4 = ["0.75","0.78","0.46"];
var progressBarArrays = [progressBarArray1,progressBarArray2,progressBarArray3,progressBarArray4];
$(function(){
var circles = $('div.circle');
var lis = $('#nav_slider a');
lis.on('click', function (a) {
var inx = $(this).index();
circles.each(function(element){
$(this).circleProgress({
startAngle: -Math.PI /2 * 8 ,
size: 130,
lineCap: 'round',
value: progressBarArrays[inx][element],
thickness: 4,
fill: {color: '#19bd9a' },
emptyFill: 'rgba(4, 115, 120, 1)'
}).on('circle-animation-progress', function(event, progress, stepValue) {
$(this).find('strong').text((100 * stepValue).toFixed(0) + '%');
});
})
});
$('.activeSlide.detailsIcon').click()
var el = $('div.circle');
var inited = false;
el.appear({ force_process: true });
el.on('appear', function() {
if(!inited){
$(this).circleProgress({
value: $(this).data("value")
});
//inited = true;
}
});
});
|
Mess4me,
Спасибо большое за помощь и терпение!! |
Artem_A,
:victory: |
Mess4me,
только еще одно но, когда скроллишь он делает задержки 01% 01% 01% дергается, а потом только загружается, и если скролл убираешь потом опять приходишь к прогресс бару он заново загружается |
Mess4me,
это из-за вырезки inited = true;, но если ее разкоментить, то при скролле будет загружаться только первый, а второй и третий блок будут уже загружены |
Mess4me,
решили проблему, спасибо еще раз большое) |
el.appear({ force_process: true });
el.each(function(i){
$(this).on('appear', function() {
if(!inited){
$(this).circleProgress({
});
if(i == 2){
inited = true;
}
}
});
})
|
| Часовой пояс GMT +3, время: 02:38. |