๐ŸŽ  Front

[Swiper] ์Šค์™€์ดํผ ์˜ค๋ฅ˜ Uncaught TypeError: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.

์—ฐ_์šฐ๋ฆฌ 2021. 12. 17. 18:45
๋ฐ˜์‘ํ˜•

๋‹ค์Œ ๊ฒŒ์‹œ๊ธ€

 

[Swiper] ์Šค์™€์ดํผ ํ•œ ํŽ˜์ด์ง€์— ์—ฌ๋Ÿฌ๊ฐœ ์‚ฌ์šฉํ•˜๊ธฐ. Multiple Swiper

์ด์ „ ๊ฒŒ์‹œ๊ธ€ ํ˜ธ์ถœ๋ถ€๋ถ„ fragment ์ง€์ •๋ถ€๋ถ„ //โญID๋ช… ๋™์ ์œผ๋กœ ๊ฐ€์ ธ์˜ด ์ตœ์ƒ๊ธ‰ 10000์› //โญID๋ช… ๋™์ ์œผ๋กœ ๊ฐ€์ ธ์˜ด //โญID๋ช… ๋™์ ์œผ๋กœ ๊ฐ€์ ธ์˜ด swiper-button-next-custom์€ ๋ฒ„ํŠผ์„ ์™ธ๋ถ€๋กœ ๋นผ๊ธฐ์œ„ํ•ด css ์ ์šฉํ•œ ๊ฒƒ์ด

lotuus.tistory.com

 

 

//fragmentํ˜ธ์ถœ๋ถ€๋ถ„
<div th:replace="fragments/slider :: slider('CATEGORY222', 'swiperB')"></div>


//fragment์ง€์ •๋ถ€๋ถ„
<div class="mt-5" th:fragment="slider(title, swiperName)">
    <h3 style="font-weight:bold;" th:text="${title}"></h3>
    <div class="swiper-cover">
        <!-- Slider main container -->
        <div class="swiper " th:classappend="${swiperName}">
            <!-- Additional required wrapper -->
            <div class="swiper-wrapper">
                <!-- Slides -->
                <th:block th:each="num : ${#numbers.sequence(1,10)}">
                <!--/* ์ปฌ๋ ‰์…˜ ์—†์ด ๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ์ฒ˜๋ฆฌ : ${#numbers.sequence(from,to,step)} */-->
                    <div class="swiper-slide">
                        <div class="col">
                            <div class="card shadow-sm">
                                <img src="https://plchldr.co/i/245x180" alt="plchldr.co" class="swiper-lazy">
                                <div class="card-body">
                                    <p class="card-text" style="text-align:left;">
                                        <span th:text="'์ฑ…์ œ๋ชฉ'+${num}"></span> <br>
                                        <span>์ตœ์ƒ๊ธ‰</span> <br>
                                        <span>10000์›</span>
                                    </p>
                                </div>
                            </div>
                        </div>
                    </div>
                </th:block>
            </div>
        </div>

        <!-- If we need navigation buttons -->
        <div class="swiper-button-prev-custom " th:classappend="${swiperName}">
            <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-arrow-left-circle-fill" viewBox="0 0 16 16">
                <path d="M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0zm3.5 7.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5z"/>
            </svg>
        </div>
        <div class="swiper-button-next-custom " th:classappend="${swiperName}">
            <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-arrow-right-circle-fill" viewBox="0 0 16 16">
                <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zM4.5 7.5a.5.5 0 0 0 0 1h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H4.5z"/>
            </svg>
        </div>

    </div>
</div>

๋‚˜๋Š” swiper๋ฅผ fragment๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด ํƒ€์ž„๋ฆฌํ”„๋กœ swiperName์„ ๋ฐ›์•„์„œ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ๋”ํ–ˆ๊ณ ,

์‚ฌ์ง„์ฒ˜๋Ÿผ ๋ฒ„ํŠผ์„ ์™ธ๋ถ€๋กœ ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด swiper-cover๋ผ๋Š” div๋กœ ํ•œ๋ฒˆ ๋” ๊ฐ์‹ธ์ฃผ์—ˆ๋‹ค 

๊ทธ๋ฆฌ๊ณ  ํ•œ ํŽ˜์ด์ง€์— ์—ฌ๋Ÿฌ ์Šฌ๋ผ์ด๋“œ๊ฐ€ ๋“ค์–ด๊ฐ„ ์ƒํƒœ์ด๋‹ค (swiper-slide ์•ˆ์€ bootstrapํด๋ž˜์Šค ์‚ฌ์šฉ)

 

const swiperA = new Swiper('.swiperA', {
	loop: true, 
	navigation: {
		nextEl: '.swiperA.swiper-button-next-custom',
		prevEl: '.swiperA.swiper-button-prev-custom',
	},
	lazy : {
		loadPrevNext : true 
	},
});

ํƒ€์ž„๋ฆฌํ”„๋กœ ๋„˜์–ด์˜จ swiperName์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ง€์ •ํ•ด์„œ ์ €๋ ‡๊ฒŒ ๊ฐ€์ ธ์˜ค๋ฉด ๋  ์ค„ ์•Œ์•˜๋Š”๋ฐ.. 

^^..

 

๊ตฌ๊ธ€๋งํ•ด๋ด๋„ ๋‚˜๋ž‘์€ ๊ฑฐ๋ฆฌ๊ฐ€ ๋‹ค ๋จผ ๊ฒƒ ๊ฐ™๊ณ  ์ด๊ฒƒ์ €๊ฒƒ ์‹œ๋„ํ•ด๋ณด๋‹ค๊ฐ€

    <div class="mt-5">
        <h3 style="font-weight:bold;">TestTest</h3>
        <div class="swiper-cover">
            <!-- Slider main container -->
            <div class="swiper swiperC"> // ํด๋ž˜์Šค๋ช…์ง€์ •โญโญโญโญโญโญ
                <!-- Additional required wrapper -->
                <div class="swiper-wrapper">
                    <!-- Slides -->
                    <th:block th:each="num : ${#numbers.sequence(1,10)}">
                        <!--/* ์ปฌ๋ ‰์…˜ ์—†์ด ๋‹จ์ˆœ ๋ฐ˜๋ณต๋ฌธ์ฒ˜๋ฆฌ : ${#numbers.sequence(from,to,step)} */-->
                        <div class="swiper-slide">
                            <div class="col">
                                <div class="card shadow-sm">
                                    <img src="https://plchldr.co/i/245x180" alt="plchldr.co" class="swiper-lazy">
                                    <div class="card-body">
                                        <p class="card-text" style="text-align:left;">
                                            <span th:text="'์ฑ…์ œ๋ชฉ'+${num}"></span> <br>
                                            <span>์ตœ์ƒ๊ธ‰</span> <br>
                                            <span>10000์›</span>
                                        </p>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </th:block>
                </div>
            </div>

            <!-- If we need navigation buttons -->
            <div class="swiper-button-prev-custom swiper-button-prev-custom-swiperC" > //css ๊ทธ๋Œ€๋กœ ๋†”๋‘๊ณ  ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ช…์ง€์ •โญโญโญโญโญโญ
                <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-arrow-left-circle-fill" viewBox="0 0 16 16">
                    <path d="M8 0a8 8 0 1 0 0 16A8 8 0 0 0 8 0zm3.5 7.5a.5.5 0 0 1 0 1H5.707l2.147 2.146a.5.5 0 0 1-.708.708l-3-3a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L5.707 7.5H11.5z"/>
                </svg>
            </div>
            <div class="swiper-button-next-custom swiper-button-next-custom-swiperC"> //css ๊ทธ๋Œ€๋กœ ๋†”๋‘๊ณ  ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ช…์ง€์ •โญโญโญโญโญโญ
                <svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-arrow-right-circle-fill" viewBox="0 0 16 16">
                    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zM4.5 7.5a.5.5 0 0 0 0 1h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H4.5z"/>
                </svg>
            </div>

        </div>
    </div>
const swiperC = new Swiper('.swiperC', {
	loop: true, //๋ฌดํ•œ๋ฐ˜๋ณต O

	navigation: {
		nextEl: '.swiper-button-prev-custom-swiperC',
		prevEl: '.swiper-button-next-custom-swiperC',
        //ํด๋ž˜์Šค๋ช… ํ•˜๋‚˜๋กœ๋งŒ ์ง€์ •โญโญโญโญโญโญ
	},

	lazy : {
		loadPrevNext : true // ์ด์ „, ๋‹ค์Œ ์ด๋ฏธ์ง€๋Š” ๋ฏธ๋ฆฌ ๋กœ๋”ฉ
	},
}

์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ ์—๋Ÿฌ์—†์ด ์ž˜๋œ๋‹ค.. ๋Œ€์ฒด ๋จธ์•ผ ใ…œใ…œ 

 

๋ฐ˜์‘ํ˜•
  • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
  • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
  • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
  • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
  • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ