<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        arctext.js實現文字平滑彎曲弧形效果的插件

        來源:懂視網 責編:小采 時間:2020-11-27 21:57:05
        文檔

        arctext.js實現文字平滑彎曲弧形效果的插件

        arctext.js實現文字平滑彎曲弧形效果的插件:本文介紹了實現文字平滑彎曲弧形效果的插件-arctext.js,分享給大家,具體如下: 扇形的文字 有時候產品大佬就是很任性,說做一個宣傳頁,一個類似拱門的效果,每次文字不一樣,但是文字得呈現拱形狀,類似上圖啦。 嘗試自己使用canvas畫和css3的rot
        推薦度:
        導讀arctext.js實現文字平滑彎曲弧形效果的插件:本文介紹了實現文字平滑彎曲弧形效果的插件-arctext.js,分享給大家,具體如下: 扇形的文字 有時候產品大佬就是很任性,說做一個宣傳頁,一個類似拱門的效果,每次文字不一樣,但是文字得呈現拱形狀,類似上圖啦。 嘗試自己使用canvas畫和css3的rot

        本文介紹了實現文字平滑彎曲弧形效果的插件-arctext.js,分享給大家,具體如下:

        扇形的文字

        有時候產品大佬就是很任性,說做一個宣傳頁,一個類似拱門的效果,每次文字不一樣,但是文字得呈現拱形狀,類似上圖啦。

        嘗試自己使用canvas畫和css3的rotate旋轉div,兩種方法都是計算旋轉角度的時候很麻煩,因為可能5個字10個字,但是得均勻地呈拱形分布,要知道讓每個文字都沿著彎曲路徑排布相當的復雜,于是便發現了這個好用的插件---arctext.js

        它能夠自動計算每個文字正確的旋轉角度,并且生成對應的CSS ,其實就是基于css3和jquery,使用起來也很方便。

        1.創建一個容器裝文字

        <h3 id="title">文字彎曲效果類似扇形拱橋狀</h3>
        

        2.引入jquery和arctext.js

        <script type="text/javascript" src="https://www.gxlcms.com//code.jquery.com/jquery-1.8.2.min.js" ></script>
        <script src="jquery.arctext.js"></script>

        3.調用arctext的方法:

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

        arctext參數說明:

      1. radius:彎曲度數,最小的值是文字長度,如果設置為-1,則顯示直線。
      2. rotate:默認true,為false則不旋轉文字
      3. dir:默認1 (1:向下彎曲 非1(-1,0,2等):向上彎曲 )
      4. fitText:默認false,如果你想嘗試使用fitText插件,設置為true,記住包裝的標簽需要fluid布局。
      5. 效果圖完整demo:

        <!DOCTYPE html>
        <html>
        <head lang="en">
         <meta charset="UTF-8">
         <title></title>
         <style>
         #title{
         font-size: 20px;
         color: #ffe400;
         text-align: center;
         }
         </style>
        </head>
        <body>
         <h3 id="title">文字彎曲效果類似扇形拱橋狀</h3>
        <script type="text/javascript" src="https://www.gxlcms.com//code.jquery.com/jquery-1.8.2.min.js" ></script>
        <script src="jquery.arctext.js"></script>
        <script>
         $(function(){
         $("#title").arctext({
         radius:180
         })
         })
        </script>
        </body>
        </html>

        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 += '<span class="'+klass+(i+1)+emptyclass+'">'+item+'</span>'+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 <br/> tag consistently across browsers,
         // (*ahem* IE *ahem*), we replaces all <br/> 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 );

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        arctext.js實現文字平滑彎曲弧形效果的插件

        arctext.js實現文字平滑彎曲弧形效果的插件:本文介紹了實現文字平滑彎曲弧形效果的插件-arctext.js,分享給大家,具體如下: 扇形的文字 有時候產品大佬就是很任性,說做一個宣傳頁,一個類似拱門的效果,每次文字不一樣,但是文字得呈現拱形狀,類似上圖啦。 嘗試自己使用canvas畫和css3的rot
        推薦度:
        標簽: 文字 字體 插件
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲国产AV无码一区二区三区| 成人性生交大片免费看好| 天黑黑影院在线观看视频高清免费| av永久免费网站在线观看| 亚洲福利在线播放| 黄网站色视频免费看无下截| 我要看免费的毛片| 真正全免费视频a毛片| 亚洲高清成人一区二区三区 | 午夜一级免费视频| 亚洲精品电影在线| 97视频免费在线| 亚洲欧美黑人猛交群| 手机看片久久国产免费| 猫咪免费人成在线网站| 亚洲日韩在线第一页| 丝瓜app免费下载网址进入ios| 男女超爽刺激视频免费播放| 亚洲午夜精品国产电影在线观看| 野花视频在线官网免费1| 亚洲综合伊人久久大杳蕉| 青青草原1769久久免费播放| 亚洲欧洲日产专区| 午夜爱爱免费视频| 中美日韩在线网免费毛片视频| 皇色在线视频免费网站| 精品国产日韩久久亚洲| 亚洲成AⅤ人影院在线观看| 亚洲免费视频一区二区三区| 亚洲精品线在线观看| 在线视频免费观看www动漫| a级毛片免费网站| 亚洲免费闲人蜜桃| 亚洲成年看片在线观看| 亚洲电影免费观看| 免费大片av手机看片| 亚洲av色福利天堂| 国产自产拍精品视频免费看| 久久午夜夜伦鲁鲁片无码免费| 亚洲综合国产一区二区三区| 免费A级毛片av无码|