canvas圖片在路線上滾動,canvas滑動事件

本文目錄一覽:

js中在canvas中加入一張背景怎麼讓背景滾動

html

head

meta charset=”utf-8″ /

titleLScroll5.html/title

script type=”text/javascript”

var LScroll = {

    img: null,

    sc: null,

    scx: null,

    at: 0,

    flag: true,

    loadImg: function(srcs, callback) {

        var mg = new Image();

        mg.src = srcs;

        mg.onload = function() {

            callback(this);

        }; // callback function

        return LScroll.img = mg;

    },

    init: function(srcs) {

        if (!document.body)

            document.createElement(‘body’);

        if (!LScroll.sc) {

            var sc = document.createElement(‘canvas’);

            LScroll.scx = sc.getContext(‘2d’);

            var callback = function(imgs) { // after onload image can be draw

                sc.width = imgs.width / 4;

                sc.height = imgs.height; //not style.

                sc.style.backgroundColor = ‘black’;

                sc.style.border = ‘solid 1px white’;

                document.body.style.backgroundColor = ‘black’;

                document.body.style.textAlign = ‘center’;

                document.body.appendChild(LScroll.sc = sc);

                LScroll.draw(LScroll.sc, LScroll.scx);

            };

            LScroll.loadImg(srcs, callback);

        }

    },

    draw: function(sc, scx) {

        scx.clearRect(0, 0, sc.width, sc.height);

        scx.save();

        scx.beginPath();

        

        switch (LScroll.flag) {

            case true:

                if (-LScroll.at == LScroll.img.width – sc.width)

                    LScroll.flag = !LScroll.flag;

                LScroll.at–;

                break;

            case false:

                if (LScroll.at == 0)

                    LScroll.flag = !LScroll.flag;

                LScroll.at++;

        }

        

        scx.drawImage(LScroll.img, LScroll.at, 0);

        scx.restore();

        setTimeout(function() {

            LScroll.draw(sc, scx);

        }, 10);

    }

};

window.onload = function() {

    LScroll.init(‘./Park.jpg’);

};

/script

/head

body

/body

/html

怎樣canvas畫布上添加滾動條,顯示更多數據

canvas有一個font屬性,用font屬性先設定好文字的字體,加粗,傾斜,字號,然後用fillText 或者strokeText插入文字就好了, 給個例子: window.onload=function () { var content = document.getElementById(“canvas”); var cxt = content.getCo…

使用canvas實現圖片滑動驗證

驗證碼本質是一種區分真實用戶和殭屍程序的一種圖靈測試。一些黑客會利用機器技術在某些業務應用中進行刷票(多次點擊投票)、發廣告、竊取客戶密碼等惡意操作,企業應用通過驗證碼確定操作者身份為真實用戶,才允許進行下一步操作。具體來說,在註冊、發帖、發評論、投票、提交密碼前添加驗證碼,可以防止批量註冊、發廣告、刷票和破解密碼等惡意操作。

滑塊驗證碼是驗證碼的一種,是由圖片驗證碼衍生後的產物。由於滑塊驗證碼安全性更高,趣味性更強,所以多數網站或APP都選擇了滑塊驗證碼。比如說之前的b站。

那麼滑塊驗證碼的原理是什麼呢?為什麼拖拽到拼圖處,就能判斷出是人為操作還是機器人呢?

其實滑塊驗證碼,不僅僅只是完成拼圖,前端用戶看不見的是——驗證碼後台針對用戶產生的行為軌跡數據進行機器學習建模,結合訪問頻率、地理位置、歷史記錄等多個維度信息,快速、準確的返回人機判定結果,故而機器識別+模擬不易通過。

滑塊驗證需要前後端配合,本文就講一下前端如何用canvas實現。

每次的拼圖照片都是隨機產生的,由後端提供

拼圖缺口的x,y坐標用random方法隨機產生

畫完拼圖,接下來要畫滑塊。這裡需要用到第二個canvas,利用絕對定位使兩個canva位置重合

保證滑塊和拼圖缺口的圖案相同

增加操作條的dom到頁面上,給按鈕綁定onMouseDown事件

這就實現了簡單的前端效果,實際操作中前端需要與後端通信,由後端進行驗證返回結果。但其實滑塊驗證也不夠安全,很容易模擬繞過,所以現在的b站也換成了中文驗證碼。

HTML5 在CANVAS標籤裡面增加滾動條

使用緩存Canvas,將中間的部分緩存,然後drawImage將緩存canvas畫到主畫布上,這樣你可以使用drawImage的剪切方法來模擬滾動了。

如何實現canvas的圖片輪播

圖片自動滑動效果很多網站都要用,最近在學html5就拿這個練練手,發現用canvas實現起來其實很簡單。代碼比較粗糙,有很多改進的地方,不過還是先記錄一下。

一. html文件

[html] view

plaincopy

!DOCTYPE html

html lang=”en”

head

meta charset=”utf-8″/

titleHTML5 Images Slider/title

script src=””/script

script src=”test.js”/script

link href=”style.css” rel=”stylesheet” /

/head

body

div id=”container”

canvas id=”imgs” width=”500″ height=”300″ onclick=”canvasClick()”/canvas

/div

div class=”imgGallery”

span class=”cover”img src=”1.jpg” id=”img1″ width=”125″ height=”150″ onclick=”iconClick(this.id)”/span

img src=”2.jpg” id=”img2″ width=”125″ height=”150″ onclick=”iconClick(this.id)”

img src=”3.jpg” id=”img3″ width=”125″ height=”150″ onclick=”iconClick(this.id)”

img src=”4.jpg” id=”img4″ width=”125″ height=”150″ onclick=”iconClick(this.id)”

/div

/body

footer

/footer

/html

二. js文件,名字test.js

[javascript] view

plaincopy

var images = new Array();

var cIndex = 0;

var speed = 5;

var context;

var canvas;

var currentImage;

var width=300;

var height=300;

var stopX = 95;

var stopY = 0;

var autoTimeout;

var manuTimeout;

var interval;

var img1;

var img2;

var img3;

var img4;

var timeoutInterval = 5;

function slideImage(id,x,y,imgObj){

this.speed = speed;

this.preImage = null;

this.nextImage = null;

this.imgObj=imgObj;

this.x=x;

this.y=y;

this.direction=”right”;

this.id = id;

}

function buttonNext(x,y,bwidth,bheight){

this.x = x;

this.y = y;

this.width = bwidth;

this.height = bheight;

}

$(document).ready(

function(){

InitImages();

canvas = document.getElementById(“imgs”);

context = canvas.getContext(“2d”);

//移動圖片

context.drawImage(currentImage.imgObj,currentImage.x,currentImage.y,width,height);

context.drawImage(currentImage.preImage.imgObj,currentImage.preImage.x,currentImage.preImage.y,width,height);

context.drawImage(currentImage.nextImage.imgObj,currentImage.nextImage.x,currentImage.nextImage.y,width,height);

context.fillStyle=”rgba(100,150,185,0.5)”;

context.fillRect(0,0,100,height);

context.fillRect(400,0,100,height);

interval = setTimeout(“intervalSlide()”, 20);

}

);

function drawFrame(){

context.clearRect(0,0,canvas.width,canvas.height);

//調用beginPath()確保不會接着上次繪製的圖形繪製

context.beginPath();

context.drawImage(currentImage.imgObj,currentImage.x,currentImage.y,width,height);

context.drawImage(currentImage.preImage.imgObj,currentImage.preImage.x,currentImage.preImage.y,width,height);

context.drawImage(currentImage.nextImage.imgObj,currentImage.nextImage.x,currentImage.nextImage.y,width,height);

context.drawImage(currentImage.preImage.preImage.imgObj,currentImage.preImage.preImage.x,currentImage.preImage.preImage.y,width,height);

//遮罩

context.fillStyle=”rgba(100,150,185,0.5)”;

context.fillRect(0,0,100,height);

context.fillRect(400,0,100,height);

//每一幀的位置變動

currentImage.x -= speed;

currentImage.preImage.x -= speed;

currentImage.nextImage.x -= speed;

currentImage.preImage.preImage.x -= speed;

if(currentImage.x == 200){

currentImage.nextImage.x = 500;

}

//到達指定位置停止變動

if(currentImage.x != stopX){

autoTimeout = setTimeout(“drawFrame()”,timeoutInterval);

}

else{

}

}

function InitImages(){

img1 = new slideImage(“img1”,-200,0,document.getElementById(“img1”));

img2 = new slideImage(“img2”,100,0,document.getElementById(“img2”));

img3 = new slideImage(“img3”,400,0,document.getElementById(“img3”));

img4 = new slideImage(“img4”,700,0,document.getElementById(“img4”));

img1.preImage = img4;

img1.nextImage = img2;

img2.preImage= img1;

img2.nextImage= img3;

img3.preImage=img2;

img3.nextImage=img4;

img4.preImage = img3;

img4.nextImage = img1;

currentImage=img2;

hilightSelectedImg();

}

function canvasClick(){

currentImage = currentImage.nextImage;

manuTimeout = setTimeout(“drawFrame()”,timeoutInterval);

}

function intervalSlide(){

currentImage = currentImage.nextImage;

hilightSelectedImg();

autoTimeout = setTimeout(“drawFrame()”, timeoutInterval);

setTimeout(“intervalSlide()”, 5000)

}

function iconClick(obj){

if(obj == “img1”){

currentImage = img1;

}

else if(obj == “img2”){

currentImage = img2;

}

else if(obj == “img3”){

currentImage = img3;

}

else if(obj == “img4”){

currentImage = img4;

}

currentImage.preImage.x = 100;

currentImage.preImage.preImage.x = -200;

currentImage.x = 400;

hilightSelectedImg();

manuTimeout = setTimeout(“drawFrame()”,timeoutInterval);

}

function hilightSelectedImg(){

img1.imgObj.width = 125;

img1.imgObj.height = 150;

img1.imgObj.style.opacity = 0.5;

img2.imgObj.width = 125;

img2.imgObj.height = 150;

img2.imgObj.style.opacity = 0.5;

img3.imgObj.width = 125;

img3.imgObj.height = 150;

img3.imgObj.style.opacity = 0.5;

img4.imgObj.width = 125;

img4.imgObj.height = 150;

img4.imgObj.style.opacity = 0.5

currentImage.imgObj.width = 150;

currentImage.imgObj.height = 175;

currentImage.imgObj.style.opacity = 1;

}

三. css文件。style.css

[css] view

plaincopy

canvas {

border:1px dashed black;

}

.imgGallery{

width:550px;

position:absolute;

height:170px

}

img{

opacity:0.5;

}

canvas繪製的圖片如何讓他移動?像我下圖這樣移動總是有軌跡。

你在paint繪製函數裡面,在canvas.drawImage繪製圖片之前,清除一下canvas,代碼如下:

canvas.clearRect(0,0,elem.width,elem.height);

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/192891.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 10:31
下一篇 2024-12-01 10:31

相關推薦

  • 用Python繪製酷炫圖片

    在本篇文章中,我們將展示如何使用Python繪製酷炫的圖片。 一、安裝Python繪圖庫 在使用Python繪製圖片之前,我們需要先安裝Python繪圖庫。Python有很多繪圖庫…

    編程 2025-04-29
  • 使用axios獲取返回圖片

    使用axios獲取返回圖片是Web開發中很常見的需求。本文將介紹如何使用axios獲取返回圖片,並從多個方面進行詳細闡述。 一、安裝axios 使用axios獲取返回圖片前,首先需…

    編程 2025-04-29
  • Python 圖片轉表格

    本文將詳細介紹如何使用Python將圖片轉為表格。大家平時在處理一些資料的時候難免會遇到圖片轉表格的需求。比如從PDF文檔中提取表格等場景。當然,這個功能也可以通過手動複製、粘貼,…

    編程 2025-04-29
  • Python緩存圖片的處理方式

    本文將從多個方面詳細闡述Python緩存圖片的處理方式,包括緩存原理、緩存框架、緩存策略、緩存更新和緩存清除等方面。 一、緩存原理 緩存是一種提高應用程序性能的技術,在網絡應用中流…

    編程 2025-04-29
  • Python如何抓取圖片數據

    Python是一門強大的編程語言,能夠輕鬆地進行各種數據抓取與處理。抓取圖片數據是一個非常常見的需求。在這篇文章中,我們將從多個方面介紹Python如何抓取圖片數據。 一、使用ur…

    編程 2025-04-29
  • Avue中如何按照後端返回的鏈接顯示圖片

    Avue是一款基於Vue.js、Element-ui等技術棧的可視化開發框架,能夠輕鬆搭建前端頁面。在開發中,我們使用到的圖片通常都是存儲在後端服務器上的,那麼如何使用Avue來展…

    編程 2025-04-28
  • Python利用Image加圖片的方法

    在Python中,利用Image庫可以快速處理圖片,並加入需要的圖片,本文將從多個方面詳細闡述這個操作。 一、Image庫的安裝和基礎操作 首先,我們需要在Python中安裝Ima…

    編程 2025-04-28
  • 使用CKSlide實現圖片輪播

    CKSlide是一個基於jQuery的插件,可以方便地為網頁添加幻燈片和圖片輪播效果。使用CKSlide可以讓網站更加生動、活潑,給用戶帶來更好的體驗。 一、CKSlide基本用法…

    編程 2025-04-28
  • Python中使用socket傳輸圖片

    本文將從多個方面介紹如何使用Python中的socket模塊傳輸圖片,涉及到準備工作、發送方部分和接收方部分的詳細代碼實現。 一、準備工作 在使用Python中的socket模塊進…

    編程 2025-04-28
  • Python窗口中導入圖片

    Python作為一種高級語言,在圖形界面的應用和操作方面越來越得心應手。本篇文章將詳細闡述Python窗口中導入圖片的方法和實現。 一、導入圖片的準備工作 在導入圖片前,我們需要先…

    編程 2025-04-28

發表回復

登錄後才能評論