javascript運動框架(二)

来源:http://www.cnblogs.com/weiyz/archive/2017/06/15/7015614.html
-Advertisement-
Play Games

緊接著上面寫的... 給div加一個邊框,border:1px solid black window.onload = function(){ var div = document.getElementById('div1'); div.onclick = function(){ setInterv ...


緊接著上面寫的...

 給div加一個邊框,border:1px solid black

window.onload = function(){
      var div = document.getElementById('div1');

      div.onclick = function(){
          setInterval(function(){
               div.style.width = div.offsetWidth-1+'px'
                    },30)
            }
}

敲玩代碼我們可以發現,寬度應該是一直在減,但是呢。反而增加了,這是為什麼呢?

 原來關於offset這一些系列的屬性都會存在這些問題,下麵就來糾正一下

      1、currentStyle是當前的樣式,但是不相容谷歌和火狐

      2、getComputedStyle是計算過後的樣式,不相容ie8--

    具體代碼如下:

傳的參數obj指的是獲取的對象,name是樣式屬性

function getStyle(obj,name){
          //currentStyle:當前的樣式
            if(obj.currentStyle){
               return obj.currentStyle[name];//不相容谷歌和火狐
            }else{
                //getComputedStyle:計算過後的樣式
                return getComputedStyle(obj,false)[name];//不相容IE8--
           }
     }

下一步我們就需要把move函數進化一下,

 需要把start開始的距離從var start = obj.offsetLeft;改為var start = parseFloat(getStyle(obj,name));

因為getStyle(obj,name)獲取到的是字元串,所以需要使用parseFloat轉換類型

具體代碼如下

<script type="text/javascript">
window.onload = function(){
var oDiv = document.getElementById('div1');
var timer;
function getStyle(obj,name){
//currentStyle:當前的樣式
if(obj.currentStyle){
return obj.currentStyle[name];//不相容谷歌和火狐
}else{
//getComputedStyle:計算過後的樣式
return getComputedStyle(obj,false)[name];//不相容IE8--
}
}
function move(obj,name,target,dur){
var count = parseInt(dur/30);//總次數
var start = parseFloat(getStyle(obj,name));//開始的距離
var dis = target - start;//距離
// 步長
var step = dis/count;
var n = 0;//當前步數
timer = setInterval(function(){
n++;
obj.style[name] = start+ n*step +'px';
if(n == count){
clearInterval(timer)

}

},30)
}
oDiv.onclick = function(){

move(oDiv,'width',800,1000)
}
}
</script>

之前也學過淡入淡出,這個我們可以用透明度來做,那麼要怎麼做呢?

首先需要判斷一下是不是有opacity這個屬性,如果有的話需要使用透明度*100,因為透明度是小數。否則的話就繼續使用預設的。

if(name == 'opacity'){
obj.style[name] = cur;
obj.style.filter = 'alpha('+cur*100+')';
}else{
obj.style[name] = cur +'px';
}

上述的代碼只能從一個方向運動,但是呢我想先向下走500,然後向左走100,這樣要怎麼做呢?

以前都學過回調函數,如果給他傳一個回調函數,是不是就可以了呢?

在運動到目的地的時候,判斷是不是有回調函數的存在。如果有則執行,反之不執行。

具體代碼如下

window.onload = function(){
var oDiv = document.getElementById('div1');
var timer;
function getStyle(obj,name){
//currentStyle:當前的樣式
if(obj.currentStyle){
return obj.currentStyle[name];//不相容谷歌和火狐
}else{
//getComputedStyle:計算過後的樣式
return getComputedStyle(obj,false)[name];//不相容IE8--
}
}
function move(obj,name,target,dur,fn){
var count = parseInt(dur/30);//總次數
var start = parseFloat(getStyle(obj,name));//開始的距離
var dis = target - start;//距離
// 步長
// var step =dis/count ;
var n = 0;//當前步數

timer = setInterval(function(){
n++;
var cur = start + n*dis/count;
if(name == 'opacity'){
obj.style[name] = cur;
obj.style.filter = 'alpha('+cur*100+')';
}
obj.style[name] = cur +'px';
if(n == count){
clearInterval(timer)
fn && fn();
}

},30)
}

oDiv.onclick = function(){

move(oDiv,'top',500,3000,function(){
move(oDiv,'left',100,500);
})
}
}
</script>

待續....


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、命名規則說明: - TOP 1)、所有的命名最好都小寫2)、屬性的值一定要用雙引號("")括起來,且一定要有值如class="divcss5",id="divcss5"3)、每個標簽都要有開始和結束,且要有正確的層次,排版有規律工整4)、空元素要有結束的tag或於開始的tag後加上"/"5)、表 ...
  • Decorator就是修飾器的意思 一、概念 修飾器是一個函數,用來修改類的行為(註意:1、函數 2、修改行為 3、對類進行操作) 1、只讀的修飾器 也可以在類的前面進行修飾 ...
  • 此文主要對使用可視化圖表對 Webpack 2 的編譯與打包進行統計分析進行了詳細地講解,供您更加直觀地參考。 ...
  • Iterator(迭代器)介面 輸出結果如下: 自定義iterator介面 ...
  • 我們在做頁面時會用到本地存儲的時候,今天說說localStorage本地存儲。 1、localStorage.name="老王"; //第一種設置存儲本地數據的方法localStorage 2、localStorage.setItem("color","red"); //第二種設置存儲本地數據的方法 ...
  • BootStrap: * 響應式的HTML,CSS,JS的框架. * 響應式設計: * 設計一套頁面,適配不同的設備,在手機,PAD,PC端都能夠正常瀏覽. * 響應式原理: * 使用CSS3的媒體查詢,根據屏幕的解析度匹配不用的樣式. * BootStrap: * 全局CSS: * 柵格: * 表 ...
  • <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style type="text/css">nav { height: 50px;}nav span { margin: 0 5px; ...
  • 這個學期一直在忙著考駕照的事情,眼看就要期末了。我的大學生活的最後一個大的作業也要來臨了。說實話這個學期真的是沒有之前的兩個學期努力了。不知道是快要畢業的緣故還是真的是把心思用在了駕照上,想著在這次放暑假之前把駕照拿到手,就在今天真的實現了,終於可以心無牽掛的離開學校去找實習的工作了。這幾天家裡面也 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...