用js实现“多行溢出隐藏”功能

2018-07-13  本文已影响0人  kup

点我看看~
由于做移动端比较多,移动端对ellipsis这个css属性的支持还算不错,对-webkit-line-clamp的支持不一,特别是安卓机。
查了查资料,发现-webkit-line-clamp并不在css规范中。
那我们就尝试手动实现一个,对外暴露接口去调用。

2种实现思路:

//调用方式:k('#p').ellipsistoText(3), k('#p').ellipsistoLine(2), k('#p').restoretoLine(), k('#p').restoretoText()
    (function () {
        var k = function (selector) {
            return new F(selector)
        }
        var F = function (selector) {
            this.ele = document.querySelector(selector);
            if (!this.ele.ori_height) {
                this.ele.ori_height = this.ele.offsetHeight; //用于保存原始高度
            }
            if (!this.ele.ori_html) {
                this.ele.ori_html = this.ele.innerHTML; //用于保存原始内容
            }
        }
        F.prototype = {
            init: function () {
                this.ele.style.height = this.ele.ori_height;
                this.ele.innerHTML = this.ele.ori_html;
            },
            ellipsistoLine: function (l) {
                this.init();
                this.ele.style.cssText = 'overflow: hidden; height: ' + parseInt(window.getComputedStyle(this.ele)['line-height']) * l + 'px';
            },
            ellipsistoText: function (t) {
                this.init();
                var len = (this.ele.ori_html).length * (1/t);
                this.ele.innerHTML = this.ele.ori_html.substr(0, len);
            },
            restore: function () {
                this.init();
           }
        }
        window.k = k;
    })(window)
上一篇下一篇

猜你喜欢

热点阅读