Codepen 룰렛 자바스크립트 오류
글쓴이: dud4946 / 작성시간: 토, 2022/05/21 - 3:06오후
코드팬에서 룰렛 코드를 구름IDE에서 실행해보려고 하는데 기능이 실행이 안됩니다.. 분명 그대로 복붙했을 뿐인데 혹시 고수분들,, 이유를 알 수 있을까요? 참고로 그냥 무작정 구글링으로 공부해보고 있는 완전 쌩초보 비전공자입니다...감사합니다!
코드팬 링크: https://codepen.io/hjshin/pen/mMEGmj
HTML
<!DOCTYPE html> <html lang="ko"> <head> <link rel="stylesheet" href="style.css" /> </head> <body> <p class="title">본의아니 행운의 여보세요?</p> <div class="box-roulette"> <div class="markers"></div> <button type="button" id="btn-start">돌려 돌려<br />돌림판</button> <div class="roulette" id="roulette"></div> </div> <script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"></script> <script src="index.js"></script> </body> </html>
CSS
html, body, button{ font-family:Arial, "돋움", Dotum, "굴림", Gulim, "Apple SD Gothic Neo", AppleGothic, sans-serif; } button{border:0;margin:0;padding:0;} .title{margin-top:50px;text-align:center;} .box-roulette{position:relative;margin:50px auto;width:500px;height:500px;border:10px solid #ccc;border-radius:50%;background:#ccc;overflow:hidden;} .box-roulette .markers{position:absolute;left:50%;top:0;margin-left:-25px;width:0;height:0;border:25px solid #fff;border-left-color:transparent;border-right-color:transparent;border-bottom-color:transparent;z-index:9999;} .box-roulette .roulette{position:relative;width:100%;height:100%;overflow:hidden;} .box-roulette .item{position:absolute;top:0;width:0;height:0;border:0 solid transparent;transform-origin:0 100%;} .box-roulette .label{position:absolute;left:0;top:0;color:#fff;white-space:nowrap;transform-origin:0 0;} .box-roulette .label .text{display:inline-block;font-size:20px;font-weight:bold;line-height:1;vertical-align:middle;} #btn-start{display:block;position:absolute;left:50%;top:50%;margin:-50px 0 0 -50px;width:100px;height:100px;font-weight:bold;background:#fff;border-radius:50px;z-index:9999;cursor:pointer;}
JS
(function($) { $.fn.extend({ roulette: function(options) { var defaults = { angle: 0, angleOffset: -45, speed: 5000, easing: "easeInOutElastic", }; var opt = $.extend(defaults, options); return this.each(function() { var o = opt; var data = [ { color: '#3f297e', text: 'N분의 1' }, { color: '#1d61ac', text: '요즘것들' }, { color: '#169ed8', text: '도박' }, { color: '#209b6c', text: '젓가락' }, { color: '#60b236', text: '거북선' }, { color: '#efe61f', text: '겁' }, { color: '#f7a416', text: 'Day Day' }, { color: '#e6471d', text: '호랑나비' }, { color: '#dc0936', text: 'Okey Dokey' }, { color: '#e5177b', text: '오빠차' }, { color: '#be107f', text: 'RESPECT' }, { color: '#881f7e', text: '작두' } ]; var $wrap = $(this); var $btnStart = $wrap.find("#btn-start"); var $roulette = $wrap.find(".roulette"); var wrapW = $wrap.width(); var angle = o.angle; var angleOffset = o.angleOffset; var speed = o.speed; var esing = o.easing; var itemSize = data.length; var itemSelector = "item"; var labelSelector = "label"; var d = 360 / itemSize; var borderTopWidth = wrapW; var borderRightWidth = tanDeg(d); for (i = 1; i <= itemSize; i += 1) { var idx = i - 1; var rt = i * d + angleOffset; var itemHTML = $('<div class="' + itemSelector + '">'); var labelHTML = ''; labelHTML += '<p class="' + labelSelector + '">'; labelHTML += ' <span class="text">' + data[idx].text + '<\/span>'; labelHTML += '<\/p>'; $roulette.append(itemHTML); $roulette.children("." + itemSelector).eq(idx).append(labelHTML); $roulette.children("." + itemSelector).eq(idx).css({ "left": wrapW / 2, "top": -wrapW / 2, "border-top-width": borderTopWidth, "border-right-width": borderRightWidth, "border-top-color": data[idx].color, "transform": "rotate(" + rt + "deg)" }); var textH = parseInt(((2 * Math.PI * wrapW) / d) * .5); $roulette.children("." + itemSelector).eq(idx).children("." + labelSelector).css({ "height": textH + 'px', "line-height": textH + 'px', "transform": 'translateX(' + (textH * 1.3) + 'px) translateY(' + (wrapW * -.3) + 'px) rotateZ(' + (90 + d * .5) + 'deg)' }); } function tanDeg(deg) { var rad = deg * Math.PI / 180; return wrapW / (1 / Math.tan(rad)); } $btnStart.on("click", function() { rotation(); }); function rotation() { var completeA = 360 * r(5, 10) + r(0, 360); $roulette.rotate({ angle: angle, animateTo: completeA, center: ["50%", "50%"], easing: $.easing.esing, callback: function() { var currentA = $(this).getRotateAngle(); console.log(currentA); }, duration: speed }); } function r(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } }); } }); })(jQuery); $(function() { $('.box-roulette').roulette(); });
Forums:
댓글 달기