我正在构建一个jquery滑块,我遇到了一个全局变量的麻烦。在我的情况下,我不能将它用作本地的。我在一个页面上使用多个滑块,因此这个全局变量EndPosition应该与滑块不同。
$.fn.slider = function(id) {
var SliderID = id;
EndPosition = (VisibleWidth - TotalWidth); //End position for sliding
有没有办法将id传递给变量名,比如EndPosition + id,所以我可以在代码的其他部分使用它,例如这里
if (NewPosition <= EndPosition+id){
RightNav.addClass('disabled');
}
答案 0 :(得分:2)
我建议使用对象和括号表示法:
var positions = {
'endPosition1': 'foo',
'endPosition2': 'bar'
}
var value = positions['endPosition' + id];
如果您的变量是全局变量,您可以像其他属性一样访问它们,但这次是全局window
对象的属性:
window['EndPosition' + id];
如果id
是数字,你也可以使用一个简单的数组:
var positions = ['foo', 'bar'];
positions[id];
positions[id - 1]; // ?
答案 1 :(得分:2)
使用对象来包含结束位置比使用多个全局变量更简洁:
var EndPositions = {};
// ...
EndPositions['id_one'] = 10;
EndPositions['id_two'] = 20;
// ...
if (NewPosition <= EndPositions[id]){
RightNav.addClass('disabled');
}
答案 2 :(得分:1)
更清洁的方式(IMO):
$.fn.slider = function(...) {
// ...
$(this).data('end-position', visibleWidth - totalWidth);
// ...
};
所以如果你做了
$('.slider').slider(...);
您可以像这样访问end-position
变量
$('.slider').data('end-position');
修改强>
如果您需要按ID找到滑块的结束位置,可以这样做:
<div class="slider" data-id="1"></div>
<script type="text/javascript">
$(document).ready(function() {
$('.slider').slider(...);
... = $('.slider[data-id=1]').data('end-position');
});
</script>
答案 3 :(得分:0)
是的,你可以:
window["EndPosition" + id]
所以你有:
if (NewPosition <= window["EndPosition" + id]) ...
window
是所有全局变量的容器。
干杯
答案 4 :(得分:-1)
是的,你可以使用json数组,你可以这样做:
var sliderObject = [
{ "EndPosition":VisibleWidth - TotalWidth },
{ "ID": id },
];
然后检查::
NewPosition <= sliderObject [EndPosition][0]