Массивы 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, время: 00:45. |