1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
      arctext.js實(shí)現(xiàn)文字平滑彎曲弧形效果的插件是什么

      小編給大家分享一下arctext.js實(shí)現(xiàn)文字平滑彎曲弧形效果的插件是什么,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

      創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站建設(shè)、成都網(wǎng)站制作與策劃設(shè)計(jì),大石橋網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:大石橋等地區(qū)。大石橋做網(wǎng)站價(jià)格咨詢:18980820575

      實(shí)現(xiàn)文字平滑彎曲弧形效果的插件是arctext.js,具體如下:

      arctext.js實(shí)現(xiàn)文字平滑彎曲弧形效果的插件是什么

      扇形的文字

      有時(shí)候產(chǎn)品大佬就是很任性,說做一個(gè)宣傳頁(yè),一個(gè)類似拱門的效果,每次文字不一樣,但是文字得呈現(xiàn)拱形狀,類似上圖啦。

      嘗試自己使用canvas畫和css3的rotate旋轉(zhuǎn)div,兩種方法都是計(jì)算旋轉(zhuǎn)角度的時(shí)候很麻煩,因?yàn)榭赡?個(gè)字10個(gè)字,但是得均勻地呈拱形分布,要知道讓每個(gè)文字都沿著彎曲路徑排布相當(dāng)?shù)膹?fù)雜,于是便發(fā)現(xiàn)了這個(gè)好用的插件---arctext.js

      它能夠自動(dòng)計(jì)算每個(gè)文字正確的旋轉(zhuǎn)角度,并且生成對(duì)應(yīng)的CSS ,其實(shí)就是基于css3和jquery,使用起來也很方便。

      1.創(chuàng)建一個(gè)容器裝文字

      文字彎曲效果類似扇形拱橋狀

      2.引入jquery和arctext.js

      3.調(diào)用arctext的方法:

      $(function(){
          $("#title").show().arctext({
            radius:180
          })
        })

      arctext參數(shù)說明:

      • radius:彎曲度數(shù),最小的值是文字長(zhǎng)度,如果設(shè)置為-1,則顯示直線。

      • rotate:默認(rèn)true,為false則不旋轉(zhuǎn)文字

      • dir:默認(rèn)1 (1:向下彎曲 非1(-1,0,2等):向上彎曲 )

      • fitText:默認(rèn)false,如果你想嘗試使用fitText插件,設(shè)置為true,記住包裝的標(biāo)簽需要fluid布局。

      效果圖完整demo:

      
      
      
        
        
        
      
      
        文字彎曲效果類似扇形拱橋狀
      
      
      
      
      

      jquery.arctext.js

      /**
       * Arctext.js
       * A jQuery plugin for curved text
       * http://www.codrops.com
       *
       * Copyright 2011, Pedro Botelho / Codrops
       * Free to use under the MIT license.
       *
       * Date: Mon Jan 23 2012
       */
      
      (function( $, undefined ) {
        
        /*! 
        * FitText.js 1.0
        *
        * Copyright 2011, Dave Rupert http://daverupert.com
        * Released under the WTFPL license 
        * http://sam.zoy.org/wtfpl/
        *
        * Date: Thu May 05 14:23:00 2011 -0600
        */
        $.fn.fitText = function( kompressor, options ) {
      
          var settings = {
            'minFontSize' : Number.NEGATIVE_INFINITY,
            'maxFontSize' : Number.POSITIVE_INFINITY
          };
      
          return this.each(function() {
            var $this = $(this);       // store the object
            var compressor = kompressor || 1; // set the compressor
        
            if ( options ) { 
             $.extend( settings, options );
            }
        
            // Resizer() resizes items based on the object width divided by the compressor * 10
            var resizer = function () {
              $this.css('font-size', Math.max(Math.min($this.width() / (compressor*10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize)));
            };
      
            // Call once to set.
            resizer();
      
            // Call on resize. Opera debounces their resize by default. 
            $(window).resize(resizer);
          });
      
        };
      
        /*
         * Lettering plugin
         *
         * changed injector function:
         *  add   for empty chars.
         */
        function injector(t, splitter, klass, after) {
          var a = t.text().split(splitter), inject = '', emptyclass;
          if (a.length) {
            $(a).each(function(i, item) {
              emptyclass = '';
              if(item === ' ') {
                emptyclass = ' empty';
                item=' ';
              }  
              inject += ''+item+''+after;
            }); 
            t.empty().append(inject);
          }
        }
        
        var methods       = {
          init : function() {
      
            return this.each(function() {
              injector($(this), '', 'char', '');
            });
      
          },
      
          words : function() {
      
            return this.each(function() {
              injector($(this), ' ', 'word', ' ');
            });
      
          },
          
          lines : function() {
      
            return this.each(function() {
              var r = "eefec303079ad17405c889e092e105b0";
              // Because it's hard to split a 
       tag consistently across browsers,         // (*ahem* IE *ahem*), we replaces all 
       instances with an md5 hash          // (of the word "split"). If you're trying to use this plugin on that          // md5 hash string, it will fail because you're being ridiculous.         injector($(this).children("br").replaceWith(r).end(), r, 'line', '');       });     }   };   $.fn.lettering     = function( method ) {     // Method calling logic     if ( method && methods[method] ) {       return methods[ method ].apply( this, [].slice.call( arguments, 1 ));     } else if ( method === 'letters' || ! method ) {       return methods.init.apply( this, [].slice.call( arguments, 0 ) ); // always pass an array     }     $.error( 'Method ' + method + ' does not exist on jQuery.lettering' );     return this;   };      /*    * Arctext object.    */   $.Arctext        = function( options, element ) {        this.$el  = $( element );     this._init( options );        };      $.Arctext.defaults   = {     radius : 0,  // the minimum value allowed is half of the word length. if set to -1, the word will be straight.     dir   : 1,  // 1: curve is down, -1: curve is up.     rotate : true, // if true each letter will be rotated.     fitText : false // if you wanna try out the fitText plugin (http://fittextjs.com/) set this to true. Don't forget the wrapper should be fluid.   };      $.Arctext.prototype   = {     _init        : function( options ) {              this.options    = $.extend( true, {}, $.Arctext.defaults, options );              // apply the lettering plugin.       this._applyLettering();              this.$el.data( 'arctext', true );              // calculate values       this._calc();              // apply transformation.       this._rotateWord();              // load the events       this._loadEvents();            },     _applyLettering   : function() {            this.$el.lettering();              if( this.options.fitText )         this.$el.fitText();              this.$letters  = this.$el.find('span').css('display', 'inline-block');          },     _calc        : function() {              if( this.options.radius === -1 )         return false;              // calculate word / arc sizes & distances.       this._calcBase();              // get final values for each letter.       this._calcLetters();          },     _calcBase      : function() {              // total word width (sum of letters widths)       this.dtWord   = 0;              var _self    = this;              this.$letters.each( function(i) {                          var $letter     = $(this),           letterWidth   = $letter.outerWidth( true );                  _self.dtWord += letterWidth;                  // save the center point of each letter:         $letter.data( 'center', _self.dtWord - letterWidth / 2 );                });              // the middle point of the word.       var centerWord = this.dtWord / 2;              // check radius : the minimum value allowed is half of the word length.       if( this.options.radius < centerWord )         this.options.radius = centerWord;              // total arc segment length, where the letters will be placed.       this.dtArcBase = this.dtWord;              // calculate the arc (length) that goes from the beginning of the first letter (x=0) to the end of the last letter (x=this.dtWord).       // first lets calculate the angle for the triangle with base = this.dtArcBase and the other two sides = radius.       var angle    = 2 * Math.asin( this.dtArcBase / ( 2 * this.options.radius ) );              // given the formula: L(ength) = R(adius) x A(ngle), we calculate our arc length.       this.dtArc   = this.options.radius * angle;            },     _calcLetters    : function() {              var _self    = this,         iteratorX  = 0;                this.$letters.each( function(i) {                    var $letter     = $(this),           // calculate each letter's semi arc given the percentage of each letter on the original word.           dtArcLetter   = ( $letter.outerWidth( true ) / _self.dtWord ) * _self.dtArc,           // angle for the dtArcLetter given our radius.           beta      = dtArcLetter / _self.options.radius,           // distance from the middle point of the semi arc's chord to the center of the circle.           // this is going to be the place where the letter will be positioned.           h        = _self.options.radius * ( Math.cos( beta / 2 ) ),           // angle formed by the x-axis and the left most point of the chord.           alpha      = Math.acos( ( _self.dtWord / 2 - iteratorX ) / _self.options.radius ),           // angle formed by the x-axis and the right most point of the chord.           theta      = alpha + beta / 2,           // distances of the sides of the triangle formed by h and the orthogonal to the x-axis.           x        = Math.cos( theta ) * h,           y        = Math.sin( theta ) * h,           // the value for the coordinate x of the middle point of the chord.           xpos      = iteratorX + Math.abs( _self.dtWord / 2 - x - iteratorX ),           // finally, calculate how much to translate each letter, given its center point.           // also calculate the angle to rotate the letter accordingly.           xval  = 0| xpos - $letter.data( 'center' ),           yval  = 0| _self.options.radius - y,           angle  = ( _self.options.rotate ) ? 0| -Math.asin( x / _self.options.radius ) * ( 180 / Math.PI ) : 0;                  // the iteratorX will be positioned on the second point of each semi arc         iteratorX = 2 * xpos - iteratorX;                  // save these values         $letter.data({           x  : xval,           y  : ( _self.options.dir === 1 ) ? yval : -yval,           a  : ( _self.options.dir === 1 ) ? angle : -angle         });                  });          },     _rotateWord     : function( animation ) {              if( !this.$el.data('arctext') ) return false;              var _self = this;              this.$letters.each( function(i) {                  var $letter     = $(this),           transformation = ( _self.options.radius === -1 ) ? 'none' : 'translateX(' + $letter.data('x') + 'px) translateY(' + $letter.data('y') + 'px) rotate(' + $letter.data('a') + 'deg)',           transition   = ( animation ) ? 'all ' + ( animation.speed || 0 ) + 'ms ' + ( animation.easing || 'linear' ) : 'none';                  $letter.css({           '-webkit-transition' : transition,           '-moz-transition' : transition,           '-o-transition' : transition,           '-ms-transition' : transition,           'transition' : transition         })         .css({           '-webkit-transform' : transformation,           '-moz-transform' : transformation,           '-o-transform' : transformation,           '-ms-transform' : transformation,           'transform' : transformation         });              });            },     _loadEvents     : function() {              if( this.options.fitText ) {                var _self = this;                  $(window).on( 'resize.arctext', function() {                      _self._calc();                      // apply transformation.           _self._rotateWord();                    });              }          },     set         : function( opts ) {              if( !opts.radius &&          !opts.dir &&         opts.rotate === 'undefined' ) {           return false;       }              this.options.radius = opts.radius || this.options.radius;       this.options.dir  = opts.dir || this.options.dir;              if( opts.rotate !== undefined ) {         this.options.rotate = opts.rotate;       }                this._calc();              this._rotateWord( opts.animation );            },     destroy       : function() {              this.options.radius = -1;       this._rotateWord();       this.$letters.removeData('x y a center');       this.$el.removeData('arctext');       $(window).off('.arctext');            }   };      var logError      = function( message ) {     if ( this.console ) {       console.error( message );     }   };      $.fn.arctext      = function( options ) {        if ( typeof options === 'string' ) {              var args = Array.prototype.slice.call( arguments, 1 );              this.each(function() {                var instance = $.data( this, 'arctext' );                  if ( !instance ) {           logError( "cannot call methods on arctext prior to initialization; " +           "attempted to call method '" + options + "'" );           return;         }                  if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {           logError( "no such method '" + options + "' for arctext instance" );           return;         }                  instance[ options ].apply( instance, args );              });          }      else {            this.each(function() {                var instance = $.data( this, 'arctext' );         if ( !instance ) {           $.data( this, 'arctext', new $.Arctext( options, this ) );         }       });          }          return this;        };    })( jQuery );

      看完了這篇文章,相信你對(duì)“arctext.js實(shí)現(xiàn)文字平滑彎曲弧形效果的插件是什么”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


      分享名稱:arctext.js實(shí)現(xiàn)文字平滑彎曲弧形效果的插件是什么
      網(wǎng)頁(yè)地址:http://ef60e0e.cn/article/psppco.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        易门县| 炎陵县| 桓仁| 益阳市| 屯留县| 盐池县| 舟曲县| 浑源县| 连江县| 靖江市| 兴业县| 安康市| 房山区| 汉寿县| 通州区| 疏附县| 达州市| 手机| 潞西市| 闽侯县| 荆州市| 云浮市| 连江县| 宝鸡市| 西贡区| 邢台市| 江安县| 阿克| 通州市| 五华县| 双流县| 万州区| 临高县| 临夏市| 会昌县| 克东县| 莆田市| 鄢陵县| 丽水市| 保德县| 长宁区|