简化 jquery 滑动循环
Simplify jquery slideup loop
我目前正在使用 jquery 开发文本滑块。
该代码依赖于滑动切换和淡入淡出的协同工作。
示例代码在这里https://codepen.io/fja3omega/pen/GwVYXM
我的jQuery是:
jQuery( document ).ready(function() {
jQuery.fn.slideFadeToggle = function(speed, easing, callback) {
return this.animate({opacity: 'toggle', height: 'toggle'}, speed, easing, callback);
};
var counted = 1;
jQuery(".slidem").find( "#rotate1" ).slideFadeToggle();
setInterval(function(){
counted = counted + 1;
torotate = "#rotate" + counted;
if(counted!=5) {
jQuery(".slidem").find( torotate ).slideFadeToggle();
} else {
counted = 1;
jQuery(".slidem .rotater" ).show();
jQuery(".slidem").find( "#rotate1" ).slideFadeToggle();
jQuery(".slidem").find( "#rotate5" ).show();
}
}, 3000);
});
我想知道是否有办法缩短或简化 jQuery。
是的,您可以简化和改进代码,删除所有不必要的 id
和 class
属性。你也可以让你的代码更抽象以支持任意数量的 "slides" 而不仅仅是 5.
请参阅下面的代码段:
jQuery(document).ready(function() {
jQuery.fn.slideFadeToggle = function(speed, easing, callback) {
return this.animate({opacity: 'toggle', height: 'toggle'}, speed, easing, callback);
};
var n = 0, slides = jQuery('.slidem > div');
(function slide() {
n = n * (n < slides.length) || +!slides.show();
slides.eq(n++).slideFadeToggle();
setTimeout(slide, 1000);
})()
});
.irotate {
text-align: center;
margin: 0 auto;
padding: 10% 0;
display: block;
}
.thisis {
display: inline-block;
vertical-align: middle;
height: 20px;
}
.slidem {
overflow: hidden;
text-align: center;
min-width: 90px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="irotate">
<div class="thisis">This is a </div>
<div class="thisis slidem">
<div> </div>
<div>simple</div>
<div>super easy</div>
<div>fun</div>
<div>working</div>
</div>
<div class="thisis"> Text Slider</div>
</div>
我目前正在使用 jquery 开发文本滑块。
该代码依赖于滑动切换和淡入淡出的协同工作。
示例代码在这里https://codepen.io/fja3omega/pen/GwVYXM
我的jQuery是:
jQuery( document ).ready(function() {
jQuery.fn.slideFadeToggle = function(speed, easing, callback) {
return this.animate({opacity: 'toggle', height: 'toggle'}, speed, easing, callback);
};
var counted = 1;
jQuery(".slidem").find( "#rotate1" ).slideFadeToggle();
setInterval(function(){
counted = counted + 1;
torotate = "#rotate" + counted;
if(counted!=5) {
jQuery(".slidem").find( torotate ).slideFadeToggle();
} else {
counted = 1;
jQuery(".slidem .rotater" ).show();
jQuery(".slidem").find( "#rotate1" ).slideFadeToggle();
jQuery(".slidem").find( "#rotate5" ).show();
}
}, 3000);
});
我想知道是否有办法缩短或简化 jQuery。
是的,您可以简化和改进代码,删除所有不必要的 id
和 class
属性。你也可以让你的代码更抽象以支持任意数量的 "slides" 而不仅仅是 5.
请参阅下面的代码段:
jQuery(document).ready(function() {
jQuery.fn.slideFadeToggle = function(speed, easing, callback) {
return this.animate({opacity: 'toggle', height: 'toggle'}, speed, easing, callback);
};
var n = 0, slides = jQuery('.slidem > div');
(function slide() {
n = n * (n < slides.length) || +!slides.show();
slides.eq(n++).slideFadeToggle();
setTimeout(slide, 1000);
})()
});
.irotate {
text-align: center;
margin: 0 auto;
padding: 10% 0;
display: block;
}
.thisis {
display: inline-block;
vertical-align: middle;
height: 20px;
}
.slidem {
overflow: hidden;
text-align: center;
min-width: 90px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="irotate">
<div class="thisis">This is a </div>
<div class="thisis slidem">
<div> </div>
<div>simple</div>
<div>super easy</div>
<div>fun</div>
<div>working</div>
</div>
<div class="thisis"> Text Slider</div>
</div>