layui.define(['jquery', 'carousel', 'laytpl'],exports => { let $ = layui.jquery let carousel = layui.carousel let laytpl = layui.laytpl let processTpl = `
{{# layui.each(d.nodes, (index, item) => {}}
{{ index + 1 }}
{{ item.tip }}
{{# if(index !== d.nodes.length -1 ) { }}
{{# } }} {{# });}}
` let contentTpl = `
` let renderProcess = (dom, nodes) => { nodes = nodes || [] laytpl(processTpl).render({ nodes }, html => { $(dom).append(html) }) } let renderContent = (dom, contents) => { laytpl(contentTpl).render({}, html => { $(dom).append(html) }) contents = contents || [] contents.forEach(item => { let tpl = `
${item._tpl}
` laytpl(tpl).render(item.ctx, html => { $('#Carousel_item').append(html) }) }) } let getCurrent = () => { let circles = $('.s-circle') let reservIndex = 0 circles.each((index, item) => { if($(item).hasClass('active')) { reservIndex = index } }) return reservIndex } let updateState = (dir) => { let circles = $('.s-circle') let reservIndex = getCurrent() $(circles[reservIndex]).removeClass('active') if(dir === 'prev'){ $(circles[reservIndex - 1 < 0 ? 2 : reservIndex - 1]).addClass('active') $('.layui-carousel-arrow[lay-type=sub]').trigger('click') } else { $(circles[(reservIndex + 1) % circles.length]).addClass('active') $('.layui-carousel-arrow[lay-type=add]').trigger('click') } } let lock = false; let updateWidthLock = (dir) => { if(lock) { return } lock = true updateState(dir) setTimeout(() => lock = false, 300); } let freshHeight = () => { setTimeout(() => { let currentItem = $('.item.layui-this') let firstChild = currentItem.children(':first')[0] $(currentItem).height(firstChild.scrollHeight) $('#Carousel_item').height(firstChild.scrollHeight) $('#StepWrapper_content').height(firstChild.scrollHeight) }, 300) } let prev = () => { updateWidthLock('prev') freshHeight() } let next = () => { updateWidthLock('next') freshHeight() } let run = (options) => { renderProcess(options.elem, options.nodes) renderContent(options.elem, options.contents) setTimeout(()=>{ carousel.render({ elem: '#Content_Main', width: '100%', // height: options.contentHeight || '20rem', indicator: 'none', autoplay: false }) $('.layui-carousel-arrow').css({ display: 'none' }) let stepWidth = options.stepWidth || '16rem' let contentWidth = options.contentWidth || '100%' let stepCount = options.nodes || [] $('.s-step').width(stepWidth) $('#StepWrapper_content').width(contentWidth) $('.s-step > .s-line').css({ width: `calc((100% - 1.5rem * ${stepCount.length}) / ${stepCount.length - 1})` }) let tips = $('.s-circle > .tip') let length = $($('.s-circle')[0]).width() + $($('.s-line')[0]).width() tips.each((index, item) => { $(item).width(length / 2) }) let stepWrapperLength = $('.s-step').width() + length / 2 $('#StepWrapper').width(stepWrapperLength) // $('.prev').each((index, item) => { // $(item).on('click', e => { // updateWidthLock('prev') // }) // }) // $('.next').each((index, item) => { // $(item).on('click', e => { // updateWidthLock('next') // }) // }) }) } exports('step', { run, prev, next, getCurrent, freshHeight }) })