精品国产免费观看久久久_久久天天躁狠狠躁夜夜爽_无码人妻少妇久久中文字幕_狠狠做深爱婷婷久久综合一区

互聯網知識

精準傳達 ? 價值共享

洞悉互聯網前沿資訊,探尋網站營銷規律

查看其它板塊

狐靈科技分享一個輸入框的打字特效

作者:狐靈科技 | 2020-03-09 20:58 |點擊:

在逛其他人博客的時候發現的,在輸入框里打字有特效,就把這個特效扒了出來,鑒于今天有三個人都問了我這個效果怎么設置,故分享之。

下面是輸入框的打字特效的演示效果
狐靈科技分享一個輸入框的打字特效

首先加載一個js文件,js代碼如下

(function webpackUniversalModuleDefinition(root, factory) {
    if(typeof exports === 'object' && typeof module === 'object')
        module.exports = factory();
    else if(typeof define === 'function' && define.amd)
        define([], factory);
    else if(typeof exports === 'object')
        exports["POWERMODE"] = factory();
    else
        root["POWERMODE"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/     // The module cache
/******/     var installedModules = {};

/******/     // The require function
/******/     function __webpack_require__(moduleId) {

/******/         // Check if module is in cache
/******/         if(installedModules[moduleId])
/******/             return installedModules[moduleId].exports;

/******/         // Create a new module (and put it into the cache)
/******/         var module = installedModules[moduleId] = {
/******/             exports: {},
/******/             id: moduleId,
/******/             loaded: false
/******/         };

/******/         // Execute the module function
/******/         modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/         // Flag the module as loaded
/******/         module.loaded = true;

/******/         // Return the exports of the module
/******/         return module.exports;
/******/     }


/******/     // expose the modules object (__webpack_modules__)
/******/     __webpack_require__.m = modules;

/******/     // expose the module cache
/******/     __webpack_require__.c = installedModules;

/******/     // __webpack_public_path__
/******/     __webpack_require__.p = "";

/******/     // Load entry module and return exports
/******/     return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {

    'use strict';

    var canvas = document.createElement('canvas');
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;
    canvas.style.cssText = 'position:fixed;top:0;left:0;pointer-events:none;z-index:999999';
    window.addEventListener('resize', function () {
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
    });
    document.body.appendChild(canvas);
    var context = canvas.getContext('2d');
    var particles = [];
    var particlePointer = 0;
    var frames = 120;
    var framesRemain = frames;
    var rendering = false;
    POWERMODE.shake = true;

    function getRandom(min, max) {
        return Math.random() * (max - min) + min;
    }

    function getColor(el) {
        if (POWERMODE.colorful) {
            var u = getRandom(0, 360);
            return 'hsla(' + getRandom(u - 10, u + 10) + ', 100%, ' + getRandom(50, 80) + '%, ' + 1 + ')';
        } else {
            return window.getComputedStyle(el).color;
        }
    }

    function getCaret() {
        var el = document.activeElement;
        var bcr;
        if (el.tagName === 'TEXTAREA' ||
            (el.tagName === 'INPUT' && el.getAttribute('type') === 'text')) {
            var offset = __webpack_require__(1)(el, el.selectionStart);
            bcr = el.getBoundingClientRect();
            return {
                x: offset.left + bcr.left,
                y: offset.top + bcr.top,
                color: getColor(el)
            };
        }
        var selection = window.getSelection();
        if (selection.rangeCount) {
            var range = selection.getRangeAt(0);
            var startNode = range.startContainer;
            if (startNode.nodeType === document.TEXT_NODE) {
                startNode = startNode.parentNode;
            }
            bcr = range.getBoundingClientRect();
            return {
                x: bcr.left,
                y: bcr.top,
                color: getColor(startNode)
            };
        }
        return { x: 0, y: 0, color: 'transparent' };
    }

    function createParticle(x, y, color) {
        return {
            x: x,
            y: y,
            alpha: 1,
            color: color,
            velocity: {
                x: -1 + Math.random() * 2,
                y: -3.5 + Math.random() * 2
            }
        };
    }

    function POWERMODE() {
        { // spawn particles
            var caret = getCaret();
            var numParticles = 5 + Math.round(Math.random() * 10);
            while (numParticles--) {
                particles[particlePointer] = createParticle(caret.x, caret.y, caret.color);
                particlePointer = (particlePointer + 1) % 500;
            }
            framesRemain = frames;
            if (!rendering) {
                requestAnimationFrame(loop);
            }
        }
        { // shake screen
            if (POWERMODE.shake) {
                var intensity = 1 + 2 * Math.random();
                var x = intensity * (Math.random() > 0.5 ? -1 : 1);
                var y = intensity * (Math.random() > 0.5 ? -1 : 1);
                document.body.style.marginLeft = x + 'px';
                document.body.style.marginTop = y + 'px';
                setTimeout(function() {
                    document.body.style.marginLeft = '';
                    document.body.style.marginTop = '';
                }, 75);
            }
        }
    };
    POWERMODE.colorful = false;

    function loop() {
        if (framesRemain > 0) {
            requestAnimationFrame(loop);
            framesRemain--;
            rendering = true;
        } else {
            rendering = false;
        }
        
        context.clearRect(0, 0, canvas.width, canvas.height);
        for (var i = 0; i < particles.length; ++i) {
            var particle = particles[i];
            if (particle.alpha <= 0.1) continue;
            particle.velocity.y += 0.075;
            particle.x += particle.velocity.x;
            particle.y += particle.velocity.y;
            particle.alpha *= 0.96;
            context.globalAlpha = particle.alpha;
            context.fillStyle = particle.color;
            context.fillRect(
                Math.round(particle.x - 1.5),
                Math.round(particle.y - 1.5),
                3, 3
            );
        }
    }
    requestAnimationFrame(loop);

    module.exports = POWERMODE;


/***/ },
/* 1 */
/***/ function(module, exports) {

    /* jshint browser: true */

    (function () {

    // The properties that we copy into a mirrored div.
    // Note that some browsers, such as Firefox,
    // do not concatenate properties, i.e. padding-top, bottom etc. -> padding,
    // so we have to do every single property specifically.
    var properties = [
      'direction',  // RTL support
      'boxSizing',
      'width',  // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does
      'height',
      'overflowX',
      'overflowY',  // copy the scrollbar for IE

      'borderTopWidth',
      'borderRightWidth',
      'borderBottomWidth',
      'borderLeftWidth',
      'borderStyle',

      'paddingTop',
      'paddingRight',
      'paddingBottom',
      'paddingLeft',

      // https://developer.mozilla.org/en-US/docs/Web/CSS/font
      'fontStyle',
      'fontVariant',
      'fontWeight',
      'fontStretch',
      'fontSize',
      'fontSizeAdjust',
      'lineHeight',
      'fontFamily',

      'textAlign',
      'textTransform',
      'textIndent',
      'textDecoration',  // might not make a difference, but better be safe

      'letterSpacing',
      'wordSpacing',

      'tabSize',
      'MozTabSize'

    ];

    var isFirefox = window.mozInnerScreenX != null;

    function getCaretCoordinates(element, position, options) {

      var debug = options && options.debug || false;
      if (debug) {
        var el = document.querySelector('#input-textarea-caret-position-mirror-div');
        if ( el ) { el.parentNode.removeChild(el); }
      }

      // mirrored div
      var div = document.createElement('div');
      div.id = 'input-textarea-caret-position-mirror-div';
      document.body.appendChild(div);

      var style = div.style;
      var computed = window.getComputedStyle? getComputedStyle(element) : element.currentStyle;  // currentStyle for IE < 9

      // default textarea styles
      style.whiteSpace = 'pre-wrap';
      if (element.nodeName !== 'INPUT')
        style.wordWrap = 'break-word';  // only for textarea-s

      // position off-screen
      style.position = 'absolute';  // required to return coordinates properly
      if (!debug)
        style.visibility = 'hidden';  // not 'display: none' because we want rendering

      // transfer the element's properties to the div
      properties.forEach(function (prop) {
        style[prop] = computed[prop];
      });

      if (isFirefox) {
        // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275
        if (element.scrollHeight > parseInt(computed.height))
          style.overflowY = 'scroll';
      } else {
        style.overflow = 'hidden';  // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'
      }

      div.textContent = element.value.substring(0, position);
      // the second special handling for input type="text" vs textarea: spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037
      if (element.nodeName === 'INPUT')
        div.textContent = div.textContent.replace(/\s/g, "\u00a0");

      var span = document.createElement('span');
      // Wrapping must be replicated *exactly*, including when a long word gets
      // onto the next line, with whitespace at the end of the line before (#7).
      // The  *only* reliable way to do that is to copy the *entire* rest of the
      // textarea's content into the <span> created at the caret position.
      // for inputs, just '.' would be enough, but why bother?
      span.textContent = element.value.substring(position) || '.';  // || because a completely empty faux span doesn't render at all
      div.appendChild(span);

      var coordinates = {
        top: span.offsetTop + parseInt(computed['borderTopWidth']),
        left: span.offsetLeft + parseInt(computed['borderLeftWidth'])
      };

      if (debug) {
        span.style.backgroundColor = '#aaa';
      } else {
        document.body.removeChild(div);
      }

      return coordinates;
    }

    if (typeof module != "undefined" && typeof module.exports != "undefined") {
      module.exports = getCaretCoordinates;
    } else {
      window.getCaretCoordinates = getCaretCoordinates;
    }

    }());

/***/ }
/******/ ])
});
;
JavaScript

然后在加入下面的代碼即可

<script>
POWERMODE.colorful = true; // make power mode colorful
POWERMODE.shake = false; // turn off shake
document.body.addEventListener('input', POWERMODE);
</script>
如沒特殊注明,文章均為狐靈科技原創,轉載請注明?? "狐靈科技分享一個輸入框的打字特效
多一份免費策劃方案,總有益處。

請直接添加技術總監微信聯系咨詢

網站設計 品牌營銷

多一份參考,總有益處

聯系狐靈科技,免費獲得專屬《策劃方案》及報價

咨詢相關問題或預約面談,可以通過以下方式與我們聯系

業務熱線:15082661954 / 大客戶專線:15523356218

亚洲精品成AV人片天堂无码| 国产午夜福利100集发布| 野花韩国高清免费视频6| 亚洲日韩乱码1区二区| 亚洲A成人片在线播放| 亚洲AV无码国产永久播放蜜芽| 无码人妻巨屁股系列大又挺拔| 我故意没有穿内裤坐公车让| 熟妇高潮一区二区三区| 四川老妇山边性对白| 天美传媒蜜桃传媒精东| 无码精品国产VA在线观看DVD| 无翼乌全彩工口里番库| 亚洲AV无码一区二区乱子伦AS| 亚洲成AV人片无码迅雷下载| 亚洲日本VA午夜中文字幕一区| 亚洲无人区码一二三码区别图片| 伊人久久大香线蕉AV不变影院 | 九九AV高潮AV无码AV喷吹| 精品国产日韩一区二区三区| 久久精品国产亚洲AV影院| 鲁一鲁AV2019在线| 欧美成人精品三级又大又粗| 人人妻人人澡人人爽人人精品电影| 日韩精品视频三区| 天美传媒国产电视推荐| 亚洲 都市 校园 激情 另类| 亚洲欧美综合精品成人网站 | 天天躁夜夜躁很很躁| 小12国产萝裸体视频福利| 亚洲成A人片在线观看无码专区 | 精品久久人人爽人人玩人人妻| 久久精品无码中文字幕| 免费A级毛片无码| 人妻丰满熟妇av无码区HD优| 少妇人妻偷人精品无码视频新浪| 无码精品人妻 中文字幕| 亚洲国产成人精品福利在线观看| 一对浑圆的胸乳被揉捏动态图| 99国产精品久久久蜜芽| 成人羞羞视频免费网站| 国产毛片久久久久久国产毛片| 精产国品一二三产区M553麻豆| 乱中年女人伦视频国产| 人人妻人人澡人人爽秒播| 无码精品人妻一区二区三区网站 | 被老头侵犯的人妻| 国产精品人人做人人爽人人添| 禁止18点击进入在线看片尤物 | 成年午夜免费韩国做受| 国产美女mv一区二区竹| 久久久久亚洲AV无码网站少妇| 欧美激情XXXX| 吻胸揉屁股摸腿娇喘视频| 亚洲色成人网一二三区| IJZZIJZZIJ亚洲大全| 国产成人精品午夜福利 | 亚洲成AV人片一区二区三区| 在线中文天堂最新版WWW| 菠萝蜜视频高清在线观看| 国产三级A三级三级| 两根大肉大捧一进一出好爽视频| 日本A级视频在线播放| 性欧美XXXX乳| 中文字字幕乱码视频高清| 丁香五月婷激情综合第九色| 精品第一国产综合精品蜜芽 | 亚洲AⅤ中文无码字幕色| 幼儿HIPHOP张婉莹仙踪网| 成人区精品人妻人妻AV| 狠狠躁狠狠躁东京热无码专区| 男生女生一起相差差差30| 我的少妇邻居全文免费| 玉蒲团2之玉女心经| 丁香五月开心婷婷激情综合| 久久国产劲爆∧V内射| 人妻有码中文字幕| 亚洲成av人无码| YY6080久久亚洲精品| 国产做无码视频在线观看浪潮 | 人人爽人人模人人人爽人人爱 | 亚洲人成影院在线无码按摩店| 99久久精品费精品国产一区二| 国产精品日韩专区第一页 | 国内精品久久久久影院一蜜桃| 美女脱个精光扒开尿口图片无遮挡| 色欲AV永久无码精品无码| 亚洲午夜无码片在线观看影院| 成人欧美一区二区| 久久精品国产亚洲AV无码娇色| 日产乱码一二三区别免费麻豆| 亚洲鲁丝片一区二区三区| 草莓丝瓜芭乐鸭脖奶茶发型 | 国产精品扒开腿做爽爽爽视频 | 久久久久黑人强伦姧人妻| 日韩欧美亚洲综合久久影院DS| 亚洲精品成人在线| 大BBW大BBW超大BBW| 久久无码国产专区精品| 无码精品人妻一区二区| 7777色情ⅩXXX欧美色妇| 好紧真爽喷水高潮视频办公室 | 亚洲欧美成人A∨在线观看| 成人爽A毛片在线视频| 久久人人爽人人爽人人片AVY| 四虎必出精品884| 97无码免费人妻超级碰碰夜夜 | 国产AV一区二区三区无码野战| 浪潮AV色综合久久天堂| 午夜精品一区二区三区在线视| GOGO人体大胆高清啪啪| 久久ZYZ资源站无码中文动漫| 特级毛片内射WWW无码| 99久久免费精品高清特色大片 | 麻豆国产成人AV在线播放| 小嫩模无套内谢第一次| ZLJZLJZLJ日本人| 久久久久久精品免费久久18| 污污污WWW精品国产网站 | 国产真实乱XXXⅩ视频| 人善之交Z0OZO0D0G人善| 一区二区三区鲁丝不卡麻豆| 国产午睡沙发系列大全| 日韩精品东京热无码视频| 中文字幕AV一区二区三区人妻少 | 成人精品视频一区二区| 麻豆MDX0020穷小子大翻身| 亚洲AV无码一区东京热久久| 丰满爆乳一区二区三区| 欧码的XL是亚洲码| 亚洲综合无码一区二区| 国产在线国偷精品免费看| 色综合99久久久无码国产精品| 777ZYZ玖玖资源站最稳定网| 久久精品国产99久久久小说| 午马视频影院1区2区3区4区| 成人无码一区二区三区| 欧美交换配乱吟粗大和黄| 永久免费的啪啪免费网址| 精产国品一二三产品麻豆| 午夜影视啪啪体验区入口| 高潮又爽又黄又无遮挡动态图| 欧美最猛黑人XXXⅩ猛男爽| 中美日韩精品激情无码AV| 久久99精品九九九久久婷婷| 亚洲AV无码一区二区三区人区| 国产精品99精品无码视亚| 三个医生换着躁我一个| 把腿张开老子臊烂你多p晓晓| 农村寡妇精品一区二区三区| 在线播放无码高潮的视频| 精品无人区麻豆乱码无限制 | 爱丫爱丫影院在线| 男女超爽视频免费播放| 一边做饭一边躁狂怎么办呢69| 精品久久无码中文字幕| 亚洲av成人一区| 国产精品久久久亚洲| 天美传媒MV在线看免费下载安装 | 国产精品网站在线观看免费传媒| 日韩午夜理论片 中文字幕| がーるずらっしゅ在线中文| 哦┅┅快┅┅用力啊┅┅电影 | 肉色超薄丝袜脚交一区二区| YYYY1111少妇影院在线观| 欧美精品少妇XXXXX喷水| 综合偷自拍亚洲乱中文字幕| 泷泽萝拉AV种子| 再深点灬舒服灬太大了添视频软件| 久久久精品国产SM调教网站| 亚洲精品一区二区丝袜图片 | 亚洲成在人线AV| 国精产品一区二区三区糖心269 | 亚洲国产精品久久久久蜜桃噜噜| 国产又色又爽又黄的在线观看| 无码人妻在线视频| 国产精品麻豆欧美日韩WW| 无码AV天堂一区二区三区| 国产精华液一区二区区别大吗| 丝袜灬啊灬快灬高潮了视频| 丰满性熟妇ⅩXXOOOSEX| 手机在线观看AV片| 国产激情久久久久影院小草| 无码国产成人久久| 国产深夜男男口爆Gay| 亚洲AV无码AV在线播放| 护士被弄到高潮喷水抽搐| 亚洲成A人片在线观看中文无码| 精品国产一区二区三区不卡在线 | 丰满人妻中伦妇伦精品APP| 少妇高清精品毛片在线视频| 公交车强摁做开腿呻吟| 脱岳裙子从后面挺进去电影| 国产乱人伦真实精品视频| 无罩大乳的熟妇正在播放| 国产午夜成人免费看片| 亚洲国产精品无码AV| 九九精品99久久久香蕉| 一区二区三区乱码在线 | 中文 | 日本japanese人妻护士|