最新文章专题视频专题问答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
当前位置: 首页 - 科技 - 知识百科 - 正文

打字效果动画的4种实现方法(超简单)

来源:懂视网 责编:小采 时间:2020-11-27 22:27:48
文档

打字效果动画的4种实现方法(超简单)

打字效果动画的4种实现方法(超简单):方法一(纯css实现): html代码: <h1 class=typing typing-item>打字动画打字动画打字动画</h1> css样式: .typing{ font-size: 1rem; padding-top: 6%; margin-bottom: 5%; font-weight: n
推荐度:
导读打字效果动画的4种实现方法(超简单):方法一(纯css实现): html代码: <h1 class=typing typing-item>打字动画打字动画打字动画</h1> css样式: .typing{ font-size: 1rem; padding-top: 6%; margin-bottom: 5%; font-weight: n

方法一(纯css实现):

html代码:

<h1 class="typing typing-item">打字动画打字动画打字动画</h1>

css样式:

.typing{
 font-size: 1rem;
 padding-top: 6%;
 margin-bottom: 5%;
 font-weight: normal;
 letter-spacing: .3rem;
 -webkit-animation: type 2s steps(50, end) forwards;
 animation: type 2s steps(50, end) forwards;
}
.typing-item{
 text-align: center;
 color: black;
 width:100%;
 white-space:nowrap;
 overflow:hidden;
}
@-webkit-keyframes type{
 from { width: 0;}
}

@keyframes type{
 from { width: 0;}
}

缺点:只能实现一行式的打字效果,无法打出一段落文字

方法二(jquery):

html代码:

<div class="text-container">
 <span class="text-static"></span>
 <span class="text"></span>
 <span class="cursor">|</span>
</div>

jquery代码:

<script type="text/javascript" src="../js/jquery.js"></script>
<script>
 $(function() {
 myPrint(["hello my word!"], 100);

 function myPrint(arr, speed) {
 var index = 0;
 var str = arr[index];
 var i = 0;
 var add = true;
 var mySetInterval = setInterval(function() {
 // 延时4个字符的时间
 if (i == str.length + 4) {
 add = false;
 // 如果是最后一个字符串则终止循环函数
 if (index + 1 >= arr.length) {
 clearInterval(mySetInterval);
 }
 } else if (i == -2) {
 // 删除后延时2个字符的时间
 add = true;
 str = arr[++index];
 }
 setTimeout(function() {
 if (add) {
 i++;
 $(".text").html(str.substring(0, i));
 } else {
 $(".text").html(str.substring(0, i - 1));
 i--;
 }
 })

 }, speed)
 }

 })
 </script>

方法三(jquery-typed插件):

html代码:

<div class="content">
 <div class="content-div">
 <span id="content-item"></span>
 </div>
</div>
<input type="hidden" id="content" value="内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容" />

引入Typed.js,Typed.js内容如下

// The MIT License (MIT)

// Typed.js | Copyright (c) 2014 Matt Boldt | www.mattboldt.com

// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:

// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.




! function($) {

 "use strict";

 var Typed = function(el, options) {

 // chosen element to manipulate text
 this.el = $(el);

 // options
 this.options = $.extend({}, $.fn.typed.defaults, options);

 // attribute to type into
 this.isInput = this.el.is('input');
 this.attr = this.options.attr;

 // show cursor
 this.showCursor = this.isInput ? false : this.options.showCursor;

 // text content of element
 this.elContent = this.attr ? this.el.attr(this.attr) : this.el.text()

 // html or plain text
 this.contentType = this.options.contentType;

 // typing speed
 this.typeSpeed = this.options.typeSpeed;

 // add a delay before typing starts
 this.startDelay = this.options.startDelay;

 // backspacing speed
 this.backSpeed = this.options.backSpeed;

 // amount of time to wait before backspacing
 this.backDelay = this.options.backDelay;

 // input strings of text
 this.strings = this.options.strings;

 // character number position of current string
 this.strPos = 0;

 // current array position
 this.arrayPos = 0;

 // number to stop backspacing on.
 // default 0, can change depending on how many chars
 // you want to remove at the time
 this.stopNum = 0;

 // Looping logic
 this.loop = this.options.loop;
 this.loopCount = this.options.loopCount;
 this.curLoop = 0;

 // for stopping
 this.stop = false;

 // custom cursor
 this.cursorChar = this.options.cursorChar;

 // shuffle the strings
 this.shuffle = this.options.shuffle;
 // the order of strings
 this.sequence = [];

 // All systems go!
 this.build();
 };

 Typed.prototype = {

 constructor: Typed

 ,
 init: function() {
 // begin the loop w/ first current string (global self.string)
 // current string will be passed as an argument each time after this
 var self = this;
 self.timeout = setTimeout(function() {
 for (var i=0;i<self.strings.length;++i) self.sequence[i]=i;

 // shuffle the array if true
 if(self.shuffle) self.sequence = self.shuffleArray(self.sequence);

 // Start typing
 self.typewrite(self.strings[self.sequence[self.arrayPos]], self.strPos);
 }, self.startDelay);
 }

 ,
 build: function() {
 // Insert cursor
 if (this.showCursor === true) {
 this.cursor = $("<span class=\"typed-cursor\">" + this.cursorChar + "</span>");
 this.el.after(this.cursor);
 }
 this.init();
 }

 // pass current string state to each function, types 1 char per call
 ,
 typewrite: function(curString, curStrPos) {
 // exit when stopped
 if (this.stop === true) {
 return;
 }

 // varying values for setTimeout during typing
 // can't be global since number changes each time loop is executed
 var humanize = Math.round(Math.random() * (100 - 30)) + this.typeSpeed;
 var self = this;

 // ------------- optional ------------- //
 // backpaces a certain string faster
 // ------------------------------------ //
 // if (self.arrayPos == 1){
 // self.backDelay = 50;
 // }
 // else{ self.backDelay = 500; }

 // contain typing function in a timeout humanize'd delay
 self.timeout = setTimeout(function() {
 // check for an escape character before a pause value
 // format: \^\d+ .. eg: ^1000 .. should be able to print the ^ too using ^^
 // single ^ are removed from string
 var charPause = 0;
 var substr = curString.substr(curStrPos);
 if (substr.charAt(0) === '^') {
 var skip = 1; // skip atleast 1
 if (/^\^\d+/.test(substr)) {
 substr = /\d+/.exec(substr)[0];
 skip += substr.length;
 charPause = parseInt(substr);
 }

 // strip out the escape character and pause value so they're not printed
 curString = curString.substring(0, curStrPos) + curString.substring(curStrPos + skip);
 }

 if (self.contentType === 'html') {
 // skip over html tags while typing
 var curChar = curString.substr(curStrPos).charAt(0)
 if (curChar === '<' || curChar === '&') {
 var tag = '';
 var endTag = '';
 if (curChar === '<') {
 endTag = '>'
 } else {
 endTag = ';'
 }
 while (curString.substr(curStrPos).charAt(0) !== endTag) {
 tag += curString.substr(curStrPos).charAt(0);
 curStrPos++;
 }
 curStrPos++;
 tag += endTag;
 }
 }

 // timeout for any pause after a character
 self.timeout = setTimeout(function() {
 if (curStrPos === curString.length) {
 // fires callback function
 self.options.onStringTyped(self.arrayPos);

 // is this the final string
 if (self.arrayPos === self.strings.length - 1) {
 // animation that occurs on the last typed string
 self.options.callback();

 self.curLoop++;

 // quit if we wont loop back
 if (self.loop === false || self.curLoop === self.loopCount)
 return;
 }

 self.timeout = setTimeout(function() {
 self.backspace(curString, curStrPos);
 }, self.backDelay);
 } else {

 /* call before functions if applicable */
 if (curStrPos === 0)
 self.options.preStringTyped(self.arrayPos);

 // start typing each new char into existing string
 // curString: arg, self.el.html: original text inside element
 var nextString = curString.substr(0, curStrPos + 1);
 if (self.attr) {
 self.el.attr(self.attr, nextString);
 } else {
 if (self.isInput) {
 self.el.val(nextString);
 } else if (self.contentType === 'html') {
 self.el.html(nextString);
 } else {
 self.el.text(nextString);
 }
 }

 // add characters one by one
 curStrPos++;
 // loop the function
 self.typewrite(curString, curStrPos);
 }
 // end of character pause
 }, charPause);

 // humanized value for typing
 }, humanize);

 }

 ,
 backspace: function(curString, curStrPos) {
 // exit when stopped
 if (this.stop === true) {
 return;
 }

 // varying values for setTimeout during typing
 // can't be global since number changes each time loop is executed
 var humanize = Math.round(Math.random() * (100 - 30)) + this.backSpeed;
 var self = this;

 self.timeout = setTimeout(function() {

 // ----- this part is optional ----- //
 // check string array position
 // on the first string, only delete one word
 // the stopNum actually represents the amount of chars to
 // keep in the current string. In my case it's 14.
 // if (self.arrayPos == 1){
 // self.stopNum = 14;
 // }
 //every other time, delete the whole typed string
 // else{
 // self.stopNum = 0;
 // }

 if (self.contentType === 'html') {
 // skip over html tags while backspacing
 if (curString.substr(curStrPos).charAt(0) === '>') {
 var tag = '';
 while (curString.substr(curStrPos).charAt(0) !== '<') {
 tag -= curString.substr(curStrPos).charAt(0);
 curStrPos--;
 }
 curStrPos--;
 tag += '<';
 }
 }

 // ----- continue important stuff ----- //
 // replace text with base text + typed characters
 var nextString = curString.substr(0, curStrPos);
 if (self.attr) {
 self.el.attr(self.attr, nextString);
 } else {
 if (self.isInput) {
 self.el.val(nextString);
 } else if (self.contentType === 'html') {
 self.el.html(nextString);
 } else {
 self.el.text(nextString);
 }
 }

 // if the number (id of character in current string) is
 // less than the stop number, keep going
 if (curStrPos > self.stopNum) {
 // subtract characters one by one
 curStrPos--;
 // loop the function
 self.backspace(curString, curStrPos);
 }
 // if the stop number has been reached, increase
 // array position to next string
 else if (curStrPos <= self.stopNum) {
 self.arrayPos++;

 if (self.arrayPos === self.strings.length) {
 self.arrayPos = 0;

 // Shuffle sequence again
 if(self.shuffle) self.sequence = self.shuffleArray(self.sequence);

 self.init();
 } else
 self.typewrite(self.strings[self.sequence[self.arrayPos]], curStrPos);
 }

 // humanized value for typing
 }, humanize);

 }
 /**
 * Shuffles the numbers in the given array.
 * @param {Array} array
 * @returns {Array}
 */
 ,shuffleArray: function(array) {
 var tmp, current, top = array.length;
 if(top) while(--top) {
 current = Math.floor(Math.random() * (top + 1));
 tmp = array[current];
 array[current] = array[top];
 array[top] = tmp;
 }
 return array;
 }

 // Start & Stop currently not working

 // , stop: function() {
 // var self = this;

 // self.stop = true;
 // clearInterval(self.timeout);
 // }

 // , start: function() {
 // var self = this;
 // if(self.stop === false)
 // return;

 // this.stop = false;
 // this.init();
 // }

 // Reset and rebuild the element
 ,
 reset: function() {
 var self = this;
 clearInterval(self.timeout);
 var id = this.el.attr('id');
 this.el.after('<span id="' + id + '"/>')
 this.el.remove();
 if (typeof this.cursor !== 'undefined') {
 this.cursor.remove();
 }
 // Send the callback
 self.options.resetCallback();
 }

 };

 $.fn.typed = function(option) {
 return this.each(function() {
 var $this = $(this),
 data = $this.data('typed'),
 options = typeof option == 'object' && option;
 if (!data) $this.data('typed', (data = new Typed(this, options)));
 if (typeof option == 'string') data[option]();
 });
 };

 $.fn.typed.defaults = {
 strings: ["These are the default values...", "You know what you should do?", "Use your own!", "Have a great day!"],
 // typing speed
 typeSpeed: 0,
 // time before typing starts
 startDelay: 0,
 // backspacing speed
 backSpeed: 0,
 // shuffle the strings
 shuffle: false,
 // time before backspacing
 backDelay: 500,
 // loop
 loop: false,
 // false = infinite
 loopCount: false,
 // show cursor
 showCursor: true,
 // character for cursor
 cursorChar: "|",
 // attribute to type (null == text)
 attr: null,
 // either html or text
 contentType: 'html',
 // call when done callback function
 callback: function() {},
 // starting callback function before each string
 preStringTyped: function() {},
 //callback for every typed string
 onStringTyped: function() {},
 // callback for reset
 resetCallback: function() {}
 };


}(window.jQuery);

调用Typed.js

var string = $('#content').val();
$('#content-item').typed({
 strings: ["  " + string],
 typeSpeed: 50,
 backDelay: 800,
 loop: false,
 loopCount: false
});

方法四(纯js):

html代码:

<div id="typing"></div>

js代码:

<script>
 var str = '内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容';
 var i = 0;
 function typing(){
 var divTyping = document.getElementById('typing');
 if (i <= str.length) {
 divTyping.innerHTML = str.slice(0, i++) + '_';
 setTimeout('typing()', 200);
 }
 else{
 divTyping.innerHTML = str;
 }
 }
 typing();
</script>

最后,发现实现打字效果还是蛮简单的对吧,css的思路是利用width和overflow:hidden,动画让宽度变宽实现像打字的样式,但是样式有限,不能实现多行显示。js/jquery,普遍都是先得到字的内容,然后再逐字往容器中添加文字。问题不难,主要是要善于思考!!

以上这篇打字效果动画的4种实现方法(超简单)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

打字效果动画的4种实现方法(超简单)

打字效果动画的4种实现方法(超简单):方法一(纯css实现): html代码: <h1 class=typing typing-item>打字动画打字动画打字动画</h1> css样式: .typing{ font-size: 1rem; padding-top: 6%; margin-bottom: 5%; font-weight: n
推荐度:
标签: 方法 打字 的方法
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top