美文网首页
用js实现“多行溢出隐藏”功能

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

作者: kup | 来源:发表于2018-07-13 22:50 被阅读0次

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

    2种实现思路:

    • 定义行数,展现该行数以内的文字,隐藏超出行数的文字;
    • 定义总内容的部分,展现该部分,隐藏超出该部分的文字;
      实现方式:
    • 模拟jQuery实现无new构造去调用
      需要注意的是,对于文字内容,css中务必设置文字的"行高"这个属性。
    //调用方式: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)
    

    相关文章

      网友评论

          本文标题:用js实现“多行溢出隐藏”功能

          本文链接:https://www.haomeiwen.com/subject/raxepftx.html