検索
ホームページウェブフロントエンドhtmlチュートリアルクリップボードのコピー機能--ZeroClipboard_html/css_WEB-ITnose

复制剪贴板功能分为两部分:ie 浏览器和非 ie 浏览器,ie 浏览器可以使用 clipboardData 对象,而非 ie 浏览器则利用 flash 与 js 的结合来实现,即 ZeroClipboard.js。

clipboardData 对象

clipboardData 对象只有 ie 浏览器认识,该对象有 3 个方法: clearData, getData和 setData。

方法 描述
clearData 通过 dataTransfer 或 clipboardData 对象从剪贴板删除一种或多种数据格式。
getData 通过 dataTransfer 或 clipboardData 对象从剪贴板获取指定格式的数据。
setData 以指定格式给 dataTransfer 或 clipboardData 对象赋予数据。

ZeroClipboard.js

对于非 ie 浏览器我们可以使用 ZeroClipboard.js。

实现原理

利用透明的 flash 覆盖在复制按钮上,点击 flash,将复制内容传入到 flash 中,再通过 flash 把传入的内容写到剪贴板上。

使用方法

首先需要把 flash 和 js 放到同一目录下,然后引用 js。如果 flash 和 js 不在同一目录,可以通过 ZeroClipboard.setMoviePath('Flash路径');来设置 flash 路径,或者修改源码中的 moviePath。

function clipboard(text, button, msg, parent) {    var clip = new ZeroClipboard.Client(); // 新建一个对象    clip.setHandCursor(true);    clip.setText(text); // 设置要复制的文本。    clip.addEventListener('mouseUp', function(client) {        alert(msg);    });    // 注册一个 button,参数为 id。点击这个 button 就会复制。    //这个 button 不一定是 input 按钮,也可以是其他 DOM 元素。    clip.glue(button, parent);}

参数说明

  • text:需要复制的文本内容
  • button:需要绑定复制功能的元素 id
  • msg:复制内容后 alert 的信息
  • parent:复制按钮(DOM 元素)所在的父层的 id,如果没有该 id,默认为 body

综上所述

function clipboard(text, button, msg, parent) {    if(window.clipboardData) {	//for ie        var oBtn = document.getElementById(button);        oBtn.onclick = function() {            window.clipboardData.setData('text', text);            alert(msg);        }    } else {        var clip = new ZeroClipboard.Client();        clip.setHandCursor(true);        clip.setText(text);        clip.addEventListener('mouseUp', function(client) {            alert(msg);        });        clip.glue(button, parent);    }    return false;}

ZeroClipboard.js 源码

// Simple Set Clipboard System// Author: Joseph Huckabyvar ZeroClipboard = {        version: "1.0.7",    clients: {}, // registered upload clients on page, indexed by id    moviePath: 'ZeroClipboard.swf', // URL to movie    nextId: 1, // ID of next movie        $: function(thingy) {        // simple DOM lookup utility function        if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);        if (!thingy.addClass) {            // extend element with a few useful methods            thingy.hide = function() { this.style.display = 'none'; };            thingy.show = function() { this.style.display = ''; };            thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };            thingy.removeClass = function(name) {                var classes = this.className.split(/\s+/);                var idx = -1;                for (var k = 0; k < classes.length; k++) {                    if (classes[k] == name) { idx = k; k = classes.length; }                }                if (idx > -1) {                    classes.splice( idx, 1 );                    this.className = classes.join(' ');                }                return this;            };            thingy.hasClass = function(name) {                return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );            };        }        return thingy;    },        setMoviePath: function(path) {        // set path to ZeroClipboard.swf        this.moviePath = path;    },        dispatch: function(id, eventName, args) {        // receive event from flash movie, send to client         var client = this.clients[id];        if (client) {            client.receiveEvent(eventName, args);        }    },        register: function(id, client) {        // register new client to receive events        this.clients[id] = client;    },        getDOMObjectPosition: function(obj, stopObj) {        // get absolute coordinates for dom element        var info = {            left: 0,             top: 0,             width: obj.width ? obj.width : obj.offsetWidth,             height: obj.height ? obj.height : obj.offsetHeight        };        while (obj && (obj != stopObj)) {            info.left += obj.offsetLeft;            info.top += obj.offsetTop;            obj = obj.offsetParent;        }        return info;    },        Client: function(elem) {        // constructor for new simple upload client        this.handlers = {};                // unique ID        this.id = ZeroClipboard.nextId++;        this.movieId = 'ZeroClipboardMovie_' + this.id;                // register client with singleton to receive flash events        ZeroClipboard.register(this.id, this);                // create movie        if (elem) this.glue(elem);    }};ZeroClipboard.Client.prototype = {        id: 0, // unique ID for us    ready: false, // whether movie is ready to receive events or not    movie: null, // reference to movie object    clipText: '', // text to copy to clipboard    handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor    cssEffects: true, // enable CSS mouse effects on dom container    handlers: null, // user event handlers        glue: function(elem, appendElem, stylesToAdd) {        // glue to DOM element        // elem can be ID or actual DOM element object        this.domElement = ZeroClipboard.$(elem);                // float just above object, or zIndex 99 if dom element isn't set        var zIndex = 9999;        if (this.domElement.style.zIndex) {            zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;        }                if (typeof(appendElem) == 'string') {            appendElem = ZeroClipboard.$(appendElem);        }        else if (typeof(appendElem) == 'undefined') {            appendElem = document.getElementsByTagName('body')[0];        }                // find X/Y position of domElement        var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);                // create floating DIV above element        this.div = document.createElement('div');        var style = this.div.style;        style.position = 'absolute';        style.left = '' + box.left + 'px';        style.top = '' + box.top + 'px';        style.width = '' + box.width + 'px';        style.height = '' + box.height + 'px';        style.zIndex = zIndex;                if (typeof(stylesToAdd) == 'object') {            for (addedStyle in stylesToAdd) {                style[addedStyle] = stylesToAdd[addedStyle];            }        }                // style.backgroundColor = '#f00'; // debug                appendElem.appendChild(this.div);                this.div.innerHTML = this.getHTML( box.width, box.height );    },        getHTML: function(width, height) {        // return HTML for movie        var html = '';        var flashvars = 'id=' + this.id +             '&width=' + width +             '&height=' + height;                    if (navigator.userAgent.match(/MSIE/)) {            // IE gets an OBJECT tag            var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';            html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';        }        else {            // all other browsers get an EMBED tag            html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';        }        return html;    },        hide: function() {        // temporarily hide floater offscreen        if (this.div) {            this.div.style.left = '-2000px';        }    },        show: function() {        // show ourselves after a call to hide()        this.reposition();    },        destroy: function() {        // destroy control and floater        if (this.domElement && this.div) {            this.hide();            this.div.innerHTML = '';                        var body = document.getElementsByTagName('body')[0];            try { body.removeChild( this.div ); } catch(e) {;}                        this.domElement = null;            this.div = null;        }    },        reposition: function(elem) {        // reposition our floating div, optionally to new container        // warning: container CANNOT change size, only position        if (elem) {            this.domElement = ZeroClipboard.$(elem);            if (!this.domElement) this.hide();        }                if (this.domElement && this.div) {            var box = ZeroClipboard.getDOMObjectPosition(this.domElement);            var style = this.div.style;            style.left = '' + box.left + 'px';            style.top = '' + box.top + 'px';        }    },        setText: function(newText) {        // set text to be copied to clipboard        this.clipText = newText;        if (this.ready) this.movie.setText(newText);    },        addEventListener: function(eventName, func) {        // add user event listener for event        // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel        eventName = eventName.toString().toLowerCase().replace(/^on/, '');        if (!this.handlers[eventName]) this.handlers[eventName] = [];        this.handlers[eventName].push(func);    },        setHandCursor: function(enabled) {        // enable hand cursor (true), or default arrow cursor (false)        this.handCursorEnabled = enabled;        if (this.ready) this.movie.setHandCursor(enabled);    },        setCSSEffects: function(enabled) {        // enable or disable CSS effects on DOM container        this.cssEffects = !!enabled;    },        receiveEvent: function(eventName, args) {        // receive event from flash        eventName = eventName.toString().toLowerCase().replace(/^on/, '');                        // special behavior for certain events        switch (eventName) {            case 'load':                // movie claims it is ready, but in IE this isn't always the case...                // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function                this.movie = document.getElementById(this.movieId);                if (!this.movie) {                    var self = this;                    setTimeout( function() { self.receiveEvent('load', null); }, 1 );                    return;                }                                // firefox on pc needs a "kick" in order to set these in certain cases                if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {                    var self = this;                    setTimeout( function() { self.receiveEvent('load', null); }, 100 );                    this.ready = true;                    return;                }                                this.ready = true;                this.movie.setText( this.clipText );                this.movie.setHandCursor( this.handCursorEnabled );                break;                        case 'mouseover':                if (this.domElement && this.cssEffects) {                    this.domElement.addClass('hover');                    if (this.recoverActive) this.domElement.addClass('active');                }                break;                        case 'mouseout':                if (this.domElement && this.cssEffects) {                    this.recoverActive = false;                    if (this.domElement.hasClass('active')) {                        this.domElement.removeClass('active');                        this.recoverActive = true;                    }                    this.domElement.removeClass('hover');                }                break;                        case 'mousedown':                if (this.domElement && this.cssEffects) {                    this.domElement.addClass('active');                }                break;                        case 'mouseup':                if (this.domElement && this.cssEffects) {                    this.domElement.removeClass('active');                    this.recoverActive = false;                }                break;        } // switch eventName                if (this.handlers[eventName]) {            for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {                var func = this.handlers[eventName][idx];                            if (typeof(func) == 'function') {                    // actual function reference                    func(this, args);                }                else if ((typeof(func) == 'object') && (func.length == 2)) {                    // PHP style object + method, i.e. [myObject, 'myMethod']                    func[0][ func[1] ](this, args);                }                else if (typeof(func) == 'string') {                    // name of function                    window[func](this, args);                }            } // foreach event handler defined        } // user defined handler for event    }    };

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTML:構造、CSS:スタイル、JavaScript:動作HTML:構造、CSS:スタイル、JavaScript:動作Apr 18, 2025 am 12:09 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの未来:ウェブデザインの進化とトレンドHTMLの未来:ウェブデザインの進化とトレンドApr 17, 2025 am 12:12 AM

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

HTML対CSS対JavaScript:比較概要HTML対CSS対JavaScript:比較概要Apr 16, 2025 am 12:04 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

HTML:それはプログラミング言語か何か他のものですか?HTML:それはプログラミング言語か何か他のものですか?Apr 15, 2025 am 12:13 AM

htmlisnotaprogramminglanguage; itisamarkuplanguage.1)htmlStructuresandformatswebcontentusingtags.2)ItworkswithcsssssssssdjavascriptforInteractivity、強化を促進します。

HTML:Webページの構造の構築HTML:Webページの構造の構築Apr 14, 2025 am 12:14 AM

HTMLは、Webページ構造の構築の基礎です。 1。HTMLは、コンテンツ構造とセマンティクス、および使用などを定義します。タグ。 2. SEO効果を改善するために、などのセマンティックマーカーを提供します。 3.タグを介したユーザーの相互作用を実現するには、フォーム検証に注意してください。 4. JavaScriptと組み合わせて、動的効果を実現するなどの高度な要素を使用します。 5.一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれ、検証ツールが必要です。 6.最適化戦略には、HTTP要求の削減、HTMLの圧縮、セマンティックタグの使用などが含まれます。

テキストからウェブサイトへ:HTMLの力テキストからウェブサイトへ:HTMLの力Apr 13, 2025 am 12:07 AM

HTMLは、Webページを構築するために使用される言語であり、タグと属性を使用してWebページの構造とコンテンツを定義します。 1)htmlは、などのタグを介してドキュメント構造を整理します。 2)ブラウザはHTMLを分析してDOMを構築し、Webページをレンダリングします。 3)マルチメディア関数を強化するなど、HTML5の新機能。 4)一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれます。 5)最適化の提案には、セマンティックタグの使用とファイルサイズの削減が含まれます。

HTML、CSS、およびJavaScriptの理解:初心者向けガイドHTML、CSS、およびJavaScriptの理解:初心者向けガイドApr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割:Webコンテンツの構造HTMLの役割:Webコンテンツの構造Apr 11, 2025 am 12:12 AM

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。