简体   繁体   English

使用 onclick 事件禁用和重新启用 JavaScript 函数

[英]Disable and re-enable a javascript function using onclick events

I'm trying to figure out how I can disable a javascript function using an onclick event.我想弄清楚如何使用 onclick 事件禁用 javascript 函数。 I've just finished building a carousel with touch events.我刚刚完成了一个带有触摸事件的轮播。 Now I'm creating another which enables or disables the carousel by onclick events.现在我正在创建另一个通过 onclick 事件启用或禁用轮播。

Here is a sample of my code I've built.这是我构建的代码示例。 The function that I want to disable is the touchCarousel which controls the touch events.我要禁用的功能是控制触摸事件的touchCarousel

The class .slider-layout enables the carousel while the class .tile-layout disable the carousel and transforms the layout in a card view layout.slider-layout启用轮播,而类.tile-layout禁用轮播并在卡片视图布局中转换布局

 var activeSlide = 0; $('.faculty-carousel').attr('data-slide', '0'); $('.tile-layout').on('click', function() { $('.faculty-items').each(function() { $(this).addClass('tile-view'); }) }) $('.prev').on('click', function(e) { event.stopPropagation(); var carouselWrapper = $(this).closest('.faculty-carousel'), facultyProfilePanel = carouselWrapper.find('.faculty-items li'), facultyProfileCount = facultyProfilePanel.length, viewPortSize = $(window).width(), carousel = carouselWrapper.find('.faculty-items'), position = 0, currentSlide = parseInt(carouselWrapper.attr('data-slide')); // Check if data-slide attribute is greater than 0 if (currentSlide > 0) { // Decremement current slide currentSlide--; // Assign CSS position to clicked slider var transformPercentage = -1 * currentSlide / facultyProfileCount * 100; carousel.css('transform', 'translateX(' + transformPercentage + '% )'); // Update data-slide attribute carouselWrapper.attr('data-slide', currentSlide); activeSlide = currentSlide; } }); $('.next').on('click', function(e) { event.stopPropagation(); // store variable relevent to clicked slider var carouselWrapper = $(this).closest('.faculty-carousel'), facultyProfilePanel = carouselWrapper.find('.faculty-items li'), facultyProfileCount = facultyProfilePanel.length, viewPortSize = $(window).width(), carousel = carouselWrapper.find('.faculty-items'), position = 0, currentSlide = parseInt(carouselWrapper.attr('data-slide')); // Check if dataslide is less than the total slides if (currentSlide < facultyProfileCount - 1) { // Increment current slide currentSlide++; // Assign CSS position to clicked slider var transformPercentage = -1 * currentSlide / facultyProfileCount * 100; carousel.css('transform', 'translateX(' + transformPercentage + '% )'); // Update data-slide attribute carouselWrapper.attr('data-slide', currentSlide); activeSlide = currentSlide; } }) function touchCarousel() { $('.faculty-carousel .faculty-items').each(function() { // create a simple instance // by default, it only adds horizontal recognizers var direction, touchSlider = this, mc = new Hammer.Manager(this), itemLength = $(this).find('li').length, count = 0, slide = $(this), timer; var sliderWrapper = slide, slideItems = sliderWrapper.find('li'), //slider = sliderWrapper.find('li'), totalPanels = slideItems.length, currentSlide = parseInt(sliderWrapper.attr('data-slide')); // mc.on("panleft panright", function(ev) { // direction = ev.type; // }); mc.add(new Hammer.Pan({ threshold: 0, pointers: 0 })); mc.on('pan', function(e) { var percentage = 100 / totalPanels * e.deltaX / window.innerWidth; var transformPercentage = percentage - 100 / totalPanels * activeSlide; touchSlider.style.transform = 'translateX( ' + transformPercentage + '% )'; var sliderWrapper = $(e.target).closest('.faculty-carousel') if (e.isFinal) { // NEW: this only runs on event end var newSlide = activeSlide; if (percentage < 0) newSlide = activeSlide + 1; else if (percentage > 0) newSlide = activeSlide - 1; goToSlide(newSlide, sliderWrapper); } }); var goToSlide = function(number, sliderWrapper) { if (number < 0) activeSlide = 0; else if (number > totalPanels - 1) activeSlide = totalPanels - 1 else activeSlide = number; sliderWrapper.attr('data-slide', activeSlide); touchSlider.classList.add('slide-animation'); var percentage = -(100 / totalPanels) * activeSlide; touchSlider.style.transform = 'translateX( ' + percentage + '% )'; timer = setTimeout(function() { touchSlider.classList.remove('slide-animation'); }, 400); }; }); } function panelSizing() { // var activeSlide = 0; // $('.faculty-carousel').attr('data-slide', '0'); var viewPortSize = $(window).width(), carouselWrapper = $('.faculty-carousel') ; //Set Panel Size based on viewport if (viewPortSize <= 1920 ) { var profilePanelSize = viewPortSize / 5 } if (viewPortSize < 1024 ) { var profilePanelSize = viewPortSize / 4 } if (viewPortSize < 768 ) { var profilePanelSize = viewPortSize / 3 } if (viewPortSize < 480 ) { var profilePanelSize = viewPortSize } carouselWrapper.each(function(){ var wrapper = $(this); // wrapper.attr('data-slide', '0'); var facultyPanel = wrapper.find('.faculty-items li'), profileCount = facultyPanel.length, // activeSlide = 0, carousel = wrapper.find('.faculty-items'); carousel.outerWidth( profilePanelSize * profileCount ); facultyPanel.outerWidth(profilePanelSize); carousel.css('transform', 'translateX(' + 0 + '% )'); }); } $('.tile-layout').on('click', function() { $('.faculty-items').each(function() { $(this).addClass('tile-view'); $('.faculty-carousel .faculty-items').css('transform', 'translateX(' + 0 + '% )'); }) }); $('.slider-layout').on('click', function() { $('.faculty-items').each(function() { $(this).removeClass('tile-view'); }) }) $(document).ready(function() { panelSizing(); touchCarousel() }) $(window).on('resize', function(){ panelSizing(); touchCarousel() })
 html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } .faculty-items.tile-view { display: flex !important; flex-wrap: wrap !important; width: 100% !important; } .faculty-items li { height: 100px; display: inline-block; position: relative; } .faculty-items li > a { position: absolute; top: 0; width: 100%; height: 100%; user-drag: none; user-select: none; -moz-user-select: none; -webkit-user-drag: none; -webkit-user-select: none; -ms-user-select: none; } .faculty-items li:nth-child(odd) { background-color: grey; } .faculty-items li:nth-child(even), .faculty-items a:nth-child(even) { background-color: aqua; } .faculty-items { overflow: hidden; position: relative; right: 0; display: flex; -webkit-transition: transform 0.3s linear; } .faculty-carousel .controls { display: block; } /*# sourceMappingURL=style.css.map */
 <link rel="stylesheet" href="style.css" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/hammer.js/2.0.8/hammer.js"></script> <div class="slider-layout"> slider layout </div> <div class="tile-layout"> tile layout </div> <div class="faculty-carousel"> <ul class="faculty-items"> <li><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li><a href="#">Item 3</a></li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> <li><a href="#">Item 6</a></li> <li><a href="#">Item 7</a></li> </ul> <div class="controls"> <div class="prev"> prev </div> <div class="next"> next </div> </div> </div> <div class="faculty-carousel"> <ul class="faculty-items"> <li><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li><a href="#">Item 3</a></li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> <li><a href="#">Item 6</a></li> <li><a href="#">Item 7</a></li> <li><a href="#">Item 8</a></li> <li><a href="#">Item 9</a></li> </ul> <div class="controls"> <div class="prev"> prev </div> <div class="next"> next </div> </div> </div> <div class="faculty-carousel"> <ul class="faculty-items"> <li><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li><a href="#">Item 3</a></li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> <li><a href="#">Item 6</a></li> <li><a href="#">Item 7</a></li> <li><a href="#">Item 8</a></li> <li><a href="#">Item 9</a></li> <li><a href="#">Item 10</a></li> </ul> <div class="controls"> <div class="prev"> prev </div> <div class="next"> next </div> </div> </div>

Very simply, add a flag such as is_enabled and when they enable/disable, set is_enabled respectively then when they try to use the carousel check if your is_enabled flag is false , if it is return false so execution stops.很简单,添加一个标志,例如is_enabled ,当它们启用/禁用时,分​​别设置is_enabled然后当他们尝试使用轮播时检查您的is_enabled标志是否为false ,如果它return false执行停止。

Update更新

By flag I simply mean a variable which has been created for the purpose of checking if a condition has been met, generally Boolean of a value.我所说的标志只是指为了检查是否满足条件而创建的变量,通常是布尔值。

Example例子

Simple example below of a click even being prevented by a flag.下面的简单示例甚至被标志阻止了点击。

JSFiddle JSFiddle

you can easy handle this issue with this code after you function see this codes在您查看此代码后,您可以使用此代码轻松处理此问题

function disableClick() {
   document.getElementById('yourId you want disable on click').onclick = "";
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM