在 layui 的社區已經寫過了,可是社區的編輯器實在不行,在此從新書寫一遍,正好能夠鞏固下javascript
描述:【全部瀏覽器】 加載圖標是靜止的,想要作成動畫。css
解決:尋找到每個layui-icon-loading
,添加上 class layui-anim layui-anim-rotate layui-anim-loop
便可。html
描述:【火狐和IE10+】單元格內若是是純文本,那麼後面的省略的字數須要達到 3 個字符以上纔會觸發 layer.tips 彈窗。java
解決:由於內部使用到了scrollWidth
,它在這兩款表現不一樣於谷歌。如今經過計算內部的文字長度來推算像素。segmentfault
// 源碼 table.js 1600 左右開始
var othis = $(this)
,elemCell = othis.children(ELEM_CELL);
// m
var computedFontWidth = function() {
var fontSize = parseFloat(elemCell.css('font-size'))
var text = elemCell.text()
var width = 0, i = 0, len = text.length
while ( i < len) {
// 基礎像素,個人是 14px,不知道能夠看 html 或者 body 內的字體大小設置。
// 火狐和IE中字體的長度就是雙字節文字按基礎像素計算,單字節文字接觸像素/2。
// 谷歌比較另類,雙字節文字按基礎像素計算,單字節是基礎像素/2與 16/2 的差值,
// 不知道是否是我想複雜了,因此用 +1,微調下瀏覽器的差別
width += text.charAt(i).match(/[^\x00-\xff]/ig) != null ? fontSize : (fontSize / 2 + 1)
i++
}
return width
}
var computedScrollWidth = function() {
var hasChildren = elemCell.children().length > 0
var originScrollWidth = elemCell.prop('scrollWidth')
var realScrollWidth = hasChildren
? 0
: (computedFontWidth() + parseFloat(elemCell.css('padding-left')) + parseFloat(elemCell.css('padding-right')))
// 這裏比較大小值,爲了對於原來非純文本仍是採用 layui 本來的方式
return Math.max(originScrollWidth, realScrollWidth)
}
if(hide){
othis.find('.layui-table-grid-down').remove();
// } else if(elemCell.prop('scrollWidth') > elemCell.outerWidth()){ // 註釋掉本來的代碼
} else if(computedScrollWidth() > elemCell.outerWidth()){
if(elemCell.find('.'+ ELEM_GRID_DOWN)[0]) return;
othis.append('<div class="'+ ELEM_GRID_DOWN +'"><i class="layui-icon layui-icon-down"></i></div>');
}
複製代碼
描述:【全部瀏覽器】select 的定位,項目中 select 若是在最右邊,右下角,點擊會讓無滾動的頁面出現滾動條。瀏覽器
解決:app
// 修改部分定位寫法
var showDown = function(){
// 將樣式復位
dl.css({
top: '',
left: '',
right: ''
})
var top = reElem.offset().top + reElem.outerHeight() + 5 - $win.scrollTop()
,dlHeight = dl.outerHeight(), dlWidth = dl.outerWidth(), winWidth = $(window).width();
index = select[0].selectedIndex; //獲取最新的 selectedIndex
// 判斷是否在最右邊的臨界點
if (dlWidth + reElem.offset().left > winWidth) {
dl.css({
left: 'auto',
right: 0
})
}
reElem.addClass(CLASS+'ed');
dds.removeClass(HIDE);
nearElem = null;
//初始選中樣式
dds.eq(index).addClass(THIS).siblings().removeClass(THIS);
//上下定位識別
if(top + dlHeight > $win.height() && top >= dlHeight){
reElem.addClass(CLASS + 'up');
} else {
// 定位重寫定義
// 動畫須要的距離和彈窗的間隔,這是根據 layui 的樣式來的,理論應該計算
var ANIM_UP = 30, SPACE = 5;
var reElemBottom = reElem.get(0).getBoundingClientRect().bottom;
var dlTop = parseInt(dl.css('top'));
var winHeight = $win.height();
if (reElemBottom + dlHeight + ANIM_UP > winHeight ) {
var computeValue = dlTop - (reElemBottom + SPACE - (winHeight - dlHeight - ANIM_UP))
dl.css('top', computeValue)
}
}
followScroll();
}
複製代碼
描述:我使用的是 layui2.4.5 版本,內部的 tree功能已經知足了,可是由於圖標問題,這裏我乾脆隱藏。編輯器
解決:ide
// 第一處修改
Tree.prototype.tree = function() {
// 大概在 line 48
var li = $(['<li '+ (hasChild ? " is-branch " : " is-leaf ") + (item.spread ? 'data-spread="'+ item.spread +'"' : '') +'>'
}
// 第二處修改,大概在 72 - 76 註釋掉
/*+ ('<i class="layui-icon layui-tree-'+ (hasChild ? "branch" : "leaf") +'">'+ ( hasChild ? ( item.spread ? icon.branch[1] : icon.branch[0]) : icon.leaf) +'</i>') */ //節點圖標
複製代碼
持續更新中...oop
轉載還請註明,本文地址