Bir öğe aşağıdaki css özelliklerinden birine sahip olup olmadığını sınamak için jQuery için yeni bir özel: sözde seçici yaptım:
- taşma: [kaydırma | otomatik]
- overflow-x: [kaydırma | otomatik]
- overflow-y: [kaydırma | otomatik]
Başka bir öğenin en yakın kaydırılabilir üst öğesini bulmak istedim, bu yüzden taşma ile en yakın üst öğeyi bulmak için başka bir küçük jQuery eklentisi yazdım.
Bu çözüm muhtemelen en iyisini yapmaz, ancak işe yarıyor gibi görünüyor. $ .ScrollTo eklentisi ile birlikte kullandım. Bazen bir elemanın başka bir kaydırılabilir kabın içinde olup olmadığını bilmem gerekir. Bu durumda üst kaydırılabilir öğeyi pencereye kaydırmak istiyorum.
Muhtemelen bunu tek bir eklenti içine almalıyım ve psuedo seçicisini eklentinin bir parçası olarak eklemeliyim ve en yakın (ana) kaydırılabilir kapsayıcıyı bulmak için 'en yakın' yöntemi göstermeliydim.
Neyse .... işte burada.
$ .isScrollable jQuery eklentisi:
$.fn.isScrollable = function(){
var elem = $(this);
return (
elem.css('overflow') == 'scroll'
|| elem.css('overflow') == 'auto'
|| elem.css('overflow-x') == 'scroll'
|| elem.css('overflow-x') == 'auto'
|| elem.css('overflow-y') == 'scroll'
|| elem.css('overflow-y') == 'auto'
);
};
$ (': scrollable') jQuery sözde seçici:
$.expr[":"].scrollable = function(a) {
var elem = $(a);
return elem.isScrollable();
};
$ .scrollableparent () jQuery eklentisi:
$.fn.scrollableparent = function(){
return $(this).closest(':scrollable') || $(window); //default to $('html') instead?
};
Uygulama oldukça basit
//does a specific element have overflow scroll?
var somedivIsScrollable = $(this).isScrollable();
//use :scrollable psuedo selector to find a collection of child scrollable elements
var scrollableChildren = $(this).find(':scrollable');
//use $.scrollableparent to find closest scrollable container
var scrollableparent = $(this).scrollableparent();
GÜNCELLEME: Robert Koritnik'in zaten çok daha güçlü olduğunu buldum: $ .scrollintoview () jQuery eklentisinin bir parçası olarak kaydırılabilir eksenleri ve kaydırılabilir kapların yüksekliğini tanımlayacak kaydırılabilir bir sahte seçici. scrollintoview eklentisi
İşte onun süslü sözde seçici (sahne):
$.extend($.expr[":"], {
scrollable: function (element, index, meta, stack) {
var direction = converter[typeof (meta[3]) === "string" && meta[3].toLowerCase()] || converter.both;
var styles = (document.defaultView && document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(element, null) : element.currentStyle);
var overflow = {
x: scrollValue[styles.overflowX.toLowerCase()] || false,
y: scrollValue[styles.overflowY.toLowerCase()] || false,
isRoot: rootrx.test(element.nodeName)
};
// check if completely unscrollable (exclude HTML element because it's special)
if (!overflow.x && !overflow.y && !overflow.isRoot)
{
return false;
}
var size = {
height: {
scroll: element.scrollHeight,
client: element.clientHeight
},
width: {
scroll: element.scrollWidth,
client: element.clientWidth
},
// check overflow.x/y because iPad (and possibly other tablets) don't dislay scrollbars
scrollableX: function () {
return (overflow.x || overflow.isRoot) && this.width.scroll > this.width.client;
},
scrollableY: function () {
return (overflow.y || overflow.isRoot) && this.height.scroll > this.height.client;
}
};
return direction.y && size.scrollableY() || direction.x && size.scrollableX();
}
});
> this.innerHeight();
Dolgunuz