Rumah hujung hadapan web tutorial js 简单实现Angular文字折叠展开效果

简单实现Angular文字折叠展开效果

Dec 18, 2017 am 11:43 AM
angular lipat watak

Angular文字折叠展开效果也是一种很有趣的功能,本文主要介绍了Angular文字折叠展开组件的原理分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助到大家。

自己写了个Angular的文字折叠组件,这种组件其实很多地方都能用到效果如下

展开后的效果


折叠后的效果


先放全部代码,使用的时候只需要把自己需要展现的文字{{designer.des}}替换成自己所在路由器所需要绑定的数据即可

.directive('textfold', function() {
    return {
      restrict: 'EA',
      template: &#39;<p style="font-size: 14px; border-left:5px solid #dddddd; padding: 15px; padding-bottom: 10px; margin-bottom: 15px; margin-top: 15px;">&#39; + &#39;<span id="textfold" style="display:block; overflow:hidden;">{{designer.des}}</span>&#39; + &#39;<br />&#39; + &#39;<span style="color: #1bb7ac; position: relative; bottom: 10px;" ng-click="more(this)">{{isMore}}</span>&#39; + &#39;</p>&#39;,
      link: function(scope, element, attrs) {
        var height;
        var maxheight;
        function textfold() {
          height = angular.element(&#39;#textfold&#39;).height();
          maxheight = angular.element(&#39;#textfold&#39;).height();
        }
        scope.$watch(&#39;designer.des&#39;, function(data) {
          if (data) {
            textfold();
          }
        })
        var isExtend = true;
        scope.isMore = "折叠";
        scope.more = function() {
          var minheight = 23;
          if (isExtend) {
            if (height >= minheight) {
              document.getElementById(&#39;textfold&#39;).style.height = height + "px";
              setTimeout(function() {
                scope.more();
              }, 1);
              height -= 10;
            } else {
              scope.isMore = "查看更多...";
              scope.$apply();
              isExtend = !isExtend;
              height += 10;
            }
          } else {
            if (height <= maxheight) {
              document.getElementById(&#39;textfold&#39;).style.height = height + "px";
              setTimeout(function() {
                scope.more();
              }, 1);
              height += 10;
            } else {
              scope.isMore = "折叠";
              scope.$apply();
              isExtend = !isExtend;
              height -= 10;
            }
          }
        }
      }
    }
  })
Salin selepas log masuk

下面我一句句的分析这个组件的思路

首先肯定是定义好Angular该组件化的模板和使用模式

restrict: &#39;EA&#39;,
template: &#39;<p style="font-size: 14px; border-left:5px solid #dddddd; padding: 15px; padding-bottom: 10px; margin-bottom: 15px; margin-top: 15px;">&#39; + &#39;<span id="textfold" style="display:block; overflow:hidden;">{{designer.des}}</span>&#39; + &#39;<br />&#39; + &#39;<span style="color: #1bb7ac; position: relative; bottom: 10px;" ng-click="more(this)">{{isMore}}</span>&#39; + &#39;</p>&#39;,
Salin selepas log masuk

EA为,使用元素和属性的方法都可以在DOM里面展现这个插件,既我可以这样 也可以这样

的形式来复用该组件 后面我们使用link定义一个函数

var height;
var maxheight;
Salin selepas log masuk

这两个变量一个是此时折叠完后的高度(这个是在展开变成折叠的过程中不断发生变化的,最后折叠后就是等于minheight),一个文字完全展开时候获取的高度

function textfold() {
          height = angular.element(&#39;#textfold&#39;).height();
          maxheight = angular.element(&#39;#textfold&#39;).height();
        }
        scope.$watch(&#39;designer.des&#39;, function(data) {
          if (data) {
            textfold();
            scope.more();
          }
        })
Salin selepas log masuk

这两句其实很重要的,当我们获取文字的高度时候,是必须要捕获文字的变化(文字完全渲染后的高度),所以我们用scope.$watch来捕获designer.des的变化,当data不为空,即文字已渲染后

if (data) {
            textfold();
          }
Salin selepas log masuk

再去执行回调函数textfold来获取当前文字的高度,暂时试过这种方法可以获取到文字渲染后的高度

如果顺序执行而不是回调执行

angular.element(&#39;#textfold&#39;).height()
Salin selepas log masuk

只会拿到span标签的默认高度而已

这里还可以添加个小技巧,增加一句scope.more();

if (data) {
            textfold();
            scope.more();
          }
Salin selepas log masuk

这样就可以让它页面渲染完后先展开,然后再折叠,那么我们就在进来页面的时候默认是折叠的状态了,在程序里面,写这种效果,一般是先让它文字展开获取到高度再返回成折叠状态,来达到进来页面就是折叠的文字状态效果

var isExtend = true;这句是让下面的scope.more进入第一个分支折叠状态

setTimeout(function() {
                scope.more();
              }, 1);
Salin selepas log masuk

这句是一句递归,其实就相当于实现jQuery的animate的文字框伸缩动画,只是这里用了一个递归来实现不断进来判断状态从而改变height值

然后通过改变scope.isMore改变它是查看更多…还是折叠

由于这里是用DOM操作

document.getElementById(&#39;textfold&#39;).style.height = height + "px";
Salin selepas log masuk

下面这里最好加多一句

scope.$apply();
Salin selepas log masuk

来获取DOM的变化

其实大概思路就是很简单的,其他一些地方也是很容易理解,大家可以动手尝试一下。

相关推荐:

css2D特效tranform--文字折叠效果_html/css_WEB-ITnose

JavaScript兼容IE6的收起折叠以及展开效果的实现案例

有关折叠式的文章推荐

Atas ialah kandungan terperinci 简单实现Angular文字折叠展开效果. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara membuat gambar bulat dan teks dalam ppt Cara membuat gambar bulat dan teks dalam ppt Mar 26, 2024 am 10:23 AM

Mula-mula, lukis bulatan dalam PPT, kemudian masukkan kotak teks dan masukkan kandungan teks. Akhir sekali, tetapkan isi dan garis besar kotak teks kepada Tiada untuk melengkapkan penghasilan gambar dan teks bulat.

Bagaimana untuk menambah titik pada teks dalam perkataan? Bagaimana untuk menambah titik pada teks dalam perkataan? Mar 19, 2024 pm 08:04 PM

Apabila kita membuat dokumen Word setiap hari, kadangkala kita perlu menambah titik di bawah perkataan tertentu dalam dokumen, terutamanya apabila terdapat soalan ujian. Untuk menyerlahkan bahagian kandungan ini, editor akan berkongsi dengan anda petua tentang cara menambah titik pada teks dalam Word, saya harap ia dapat membantu anda. 1. Buka dokumen perkataan kosong. 2. Contohnya, tambah titik di bawah perkataan "Cara menambah titik pada teks". 3. Kami mula-mula memilih perkataan "Cara menambah titik pada teks" dengan butang kiri tetikus Ambil perhatian bahawa jika anda ingin menambah titik pada perkataan itu pada masa hadapan, anda mesti menggunakan butang kiri tetikus untuk memilih perkataan mana. . Hari ini kami menambah titik pada perkataan ini, jadi kami telah memilih beberapa perkataan. Pilih perkataan ini, klik kanan dan klik Font dalam kotak fungsi pop timbul. 4. Kemudian sesuatu seperti ini akan muncul

Sarung telefon Google Pixel 9 Pro Fold terdedah: Skrin luar 6.4 inci, skrin dalam 8.02 inci Sarung telefon Google Pixel 9 Pro Fold terdedah: Skrin luar 6.4 inci, skrin dalam 8.02 inci Jun 25, 2024 pm 02:35 PM

Menurut berita pada 25 Jun, sumber ytechb menerbitkan catatan blog semalam (24 Jun), berkongsi paparan sarung telefon bimbit Google Pixel 9 Pro Fold, sekali lagi menunjukkan reka bentuk bahagian belakang skrin lipat ini. Menurut berita sebelum ini, Google akan mengeluarkan siri telefon bimbit Pixel 9 pada Oktober tahun ini Selain tiga telefon dalam siri Pixel 9, Pixel Fold juga akan disertakan dalam siri Pixel 9, dan akan dinamakan Pixel 9. Pro Fold selepas ia dilancarkan secara rasmi. Sarung telefon yang terdedah kali ini datang daripada pengeluar aksesori Torro, kedai dalam talian UK dan AS telah menyenaraikan sarung telefon produk dan mendedahkan reka bentuk serta saiz paparan telefon. Halaman menunjukkan sejumlah besar pemaparan sarung telefon Pixel 9 Pro Fold

Bagaimana untuk memasang Angular pada Ubuntu 24.04 Bagaimana untuk memasang Angular pada Ubuntu 24.04 Mar 23, 2024 pm 12:20 PM

Angular.js ialah platform JavaScript yang boleh diakses secara bebas untuk mencipta aplikasi dinamik. Ia membolehkan anda menyatakan pelbagai aspek aplikasi anda dengan cepat dan jelas dengan memanjangkan sintaks HTML sebagai bahasa templat. Angular.js menyediakan pelbagai alatan untuk membantu anda menulis, mengemas kini dan menguji kod anda. Selain itu, ia menyediakan banyak ciri seperti penghalaan dan pengurusan borang. Panduan ini akan membincangkan cara memasang Angular pada Ubuntu24. Mula-mula, anda perlu memasang Node.js. Node.js ialah persekitaran berjalan JavaScript berdasarkan enjin ChromeV8 yang membolehkan anda menjalankan kod JavaScript pada bahagian pelayan. Untuk berada di Ub

Telefon lipat Samsung 10,000 yuan W25 didedahkan: kamera hadapan bawah skrin 5 megapiksel dan badan lebih nipis Telefon lipat Samsung 10,000 yuan W25 didedahkan: kamera hadapan bawah skrin 5 megapiksel dan badan lebih nipis Aug 23, 2024 pm 12:43 PM

Menurut berita pada 23 Ogos, Samsung akan melancarkan telefon bimbit lipat W25 baharu, yang dijangka akan diumumkan pada penghujung September Ia akan membuat penambahbaikan yang sepadan dalam kamera hadapan bawah skrin dan ketebalan badan. Menurut laporan, Samsung W25, dengan nama kod Q6A, akan dilengkapi dengan kamera bawah skrin 5 megapiksel, yang merupakan penambahbaikan berbanding kamera 4 megapiksel siri Galaxy Z Fold. Selain itu, kamera hadapan skrin luaran W25 dan kamera sudut ultra lebar masing-masing dijangka 10 juta dan 12 juta piksel. Dari segi reka bentuk, W25 adalah kira-kira 10 mm tebal dalam keadaan terlipat, iaitu kira-kira 2 mm lebih nipis daripada Galaxy Z Fold 6 standard. Dari segi skrin, W25 mempunyai skrin luaran 6.5 inci dan skrin dalaman 8 inci, manakala Galaxy Z Fold6 mempunyai skrin luaran 6.3 inci dan skrin dalaman 8 inci.

Artikel yang meneroka pemaparan sisi pelayan (SSR) dalam Angular Artikel yang meneroka pemaparan sisi pelayan (SSR) dalam Angular Dec 27, 2022 pm 07:24 PM

Adakah anda tahu Angular Universal? Ia boleh membantu tapak web menyediakan sokongan SEO yang lebih baik!

Cara menggunakan PHP dan Angular untuk pembangunan bahagian hadapan Cara menggunakan PHP dan Angular untuk pembangunan bahagian hadapan May 11, 2023 pm 04:04 PM

Dengan perkembangan pesat Internet, teknologi pembangunan bahagian hadapan juga sentiasa bertambah baik dan berulang. PHP dan Angular ialah dua teknologi yang digunakan secara meluas dalam pembangunan bahagian hadapan. PHP ialah bahasa skrip sebelah pelayan yang boleh mengendalikan tugas seperti memproses borang, menjana halaman dinamik dan mengurus kebenaran akses. Angular ialah rangka kerja JavaScript yang boleh digunakan untuk membangunkan aplikasi satu halaman dan membina aplikasi web berkomponen. Artikel ini akan memperkenalkan cara menggunakan PHP dan Angular untuk pembangunan bahagian hadapan, dan cara menggabungkannya

Model Samsung Galaxy Z Flip 6 pertama kali didedahkan: bezel lebih sempit, lipatan masih ada Model Samsung Galaxy Z Flip 6 pertama kali didedahkan: bezel lebih sempit, lipatan masih ada Jun 22, 2024 am 03:28 AM

Menurut berita pada 21 Jun, media asing baru-baru ini mengeluarkan gambar model Samsung Galaxy Z Flip 6 di Internet. Mengikut gambar, boleh difahamkan bahawa sempadan Samsung Galaxy Z Flip 6 akan dikecilkan lagi, yang bermaksud bahawa lebar telefon mungkin dikurangkan dalam keadaan terlipat, dan ia juga akan memberikan cengkaman dan mudah alih yang lebih selesa . Lebih-lebih lagi, berbanding dengan ZFlip5 generasi sebelumnya, model Galaxy ZFlip6 lebih segi empat sama dan modul kamera di bahagian belakang lebih menonjol. Ia dijangka menggunakan sensor kamera baharu. Walaubagaimanapun dari hadapan, lipatan telefon masih agak ketara, namun memandangkan model yang bocor adalah telefon model, mungkin ada sedikit perbezaan dengan telefon sebenar, jadi ia adalah untuk rujukan sahaja. Dari segi konfigurasi prestasi, Galaxy

See all articles