我在这里建立了一个网站:argit.bounde.co.uk
我已经按照制作滑块的教程进行操作,它的工作原理是宽度为ul
,然后li's
浮动。然后,div
隐藏了overflow: hidden
。然后让jquery动画margin-left = imgWidth
我的网站的其余部分是流畅的宽度,所以显然我需要滑块跟随其他方面它看起来有点傻。目前我已经使用jquery给li's
设置了一个宽度,然后将img设为100%。这个解决方案没问题,但是当设备不支持jQuery时会崩溃,所以我更喜欢更健壮的方法。我不能将ul
设置为100%,因为图像不再是一行,而是简单地堆叠在彼此之下
有人能想到我能做到这一点的方法吗?
这里有完整的滑块jQuery:
var current = 1;
function slider () {
var sliderUl = $('div#slider ul'),
imgs = sliderUl.find('img'),
imgWidth = imgs.width(),
imgLength = imgs.length,
totalImgsWidth = imgLength * imgWidth;
var direction = $(this).data('dir'),
loc = imgWidth;
if( direction == 'next') {
++current;
} else {
--current;
}
if( current === 0) {
current = imgLength;
loc = totalImgsWidth - imgWidth;
direction = 'next';
} else if ( current - 1 === imgLength ) {
current = 1;
loc = 0;
}
transition(sliderUl, loc, direction);
};
function transition( container, loc, direction ) {
var ease;
var unit;
if (direction && loc !== 0) {
unit = (direction === 'next') ? '-=' : '+=';
}
container.animate({
'margin-left': unit ? (unit + loc) : loc
})
};
答案 0 :(得分:2)
我已经链接到我编程的插件的小提琴,这样做。要求是父容器具有position:relative,并且在较小程度上overflow:hidden,并且在加载图像之后调用它。随意使用代码并从中学习。
http://jsfiddle.net/dhQk/35K8X/7/show/
<强> JS 强>
$.fn.fitToParent = function (type, align) {
type = typeof type === 'undefined' ? 'fit' : type;
align = typeof align === 'undefined' ? 'center' : align;
return this.each(function () {
var $this = $(this);
var $parent = $(this).parent();
if ($this.is('img')) {
$this.css({
'position': 'absolute',
'width': '100%',
'height': 'auto'
}).css({ //Allow Height to adjust
'left': '',
'margin-left': '',
'top': align == 'center' ? '50%' : (align == 'left' ? '0px' : ''),
'bottom': '',
'margin-top': align == 'center' ? (-$this.height() / 2) + 'px' : ''
});
//Size by height depending on sizing type
if (($this.height() > $parent.height() && type === 'fit') || ($this.height() < $parent.height() && type === 'fill')) {
$this.css({
'width': 'auto',
'height': '100%'
}).css({ //Allow Width to adjust
'top': '',
'margin-top': '',
'left': align == 'center' ? '50%' : (align == 'left' ? '0px' : ''),
'right': align == 'right' ? '0px' : '',
'margin-left': align == 'center' ? (-$this.width() / 2) + 'px' : ''
});
}
if (type === 'none') {
$this.css({
'width': '',
'height': ''
}).css({ //Allow Width to adjust
'top': '50%',
'bottom': '',
'margin-top': (-$this.height() / 2) + 'px',
'left': align == 'center' ? '50%' : (align == 'left' ? '0px' : ''),
'right': align == 'right' ? '0px' : '',
'margin-left': align == 'center' ? (-$this.width() / 2) + 'px' : ''
});
}
}
});
};
为了解释逻辑,它只是将宽度设置为100%并检查它的高度是否更大,如果不是则宽度100%就可以了。如果没有,它会将其切换到100%的高度。在图像上如果设置了一个尺寸属性,则另一个尺寸属性相应地调整大小。大小逻辑完成后。它只是使用绝对位置和余量位置使图像居中。
答案 1 :(得分:1)
您可以检测设备是否支持jQuery:
$('html').addClass('jQuery');
然后为此类使用特定的css样式:
.jQuery li {
/* some style */
}
如果设置了'jQuery'类,那么设备支持jQuery。
答案 2 :(得分:0)
最简单的方法是不要浮动你的面板(li&#39; s)并将它们设置为包装div的100%宽度。然后,当用户导航时,将下一个面板以100%边距放在右侧,然后将其设置为0边距,同时将上一个面板设置为-100%边距。当用户选择前一个面板时,执行相反的操作。我不认为这种方法在旧IE中运行良好,但我可能会弄错。
或者,您可以绑定到窗口调整大小事件(最好限制事件)并调整面板大小和任何保存的宽度/高度