顯示具有 JQuery 標籤的文章。 顯示所有文章
顯示具有 JQuery 標籤的文章。 顯示所有文章

2022年6月17日 星期五

[2022.LEARN.013][筆記]html5上傳圖片轉base64預覽

 範例:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>  

</head>

<body>
    <div class="container">
    <label>圖片預覽:</label>
    <div id="previewDiv">
     
    </div>

    <!-- IMG.END -->
    <button type="button">
      上傳相片
    </button>
    <input type="file" id="upimg" accept=".png, .jpg, .jpeg" onchange='imgUploadCheck(this)' />
    <button type="button" id="btnRemovePic"
            class="am-btn am-btn-default am-radius am-btn-sm" style="display:none">移除圖片</button>        
 
  </div>
  <script>
    $(function(){
   
    });
    //圖片上傳檢查
    /* 1.只能是jpg/jpeg  2.檔名只接受小寫英文、數字、底線、連字號  3.不可超過150KB*/
    function imgUploadCheck(input){
      //清空網址上傳欄位
      /*$('#upimg').val('');
      $('#img_previewPic').attr({
        src: ''
      });
      $('#imgErrorTip').html('').hide();*/

      var file = $(input)[0].files;
      //為空值>重置
      if(file.length==0){
        $('#btnRemovePic').click();
        $(input).parent().removeClass('am-form-error');
        $('#imgErrorTip').html('').hide();
        return false;
      }
      var fileName = file[0].name;
      var fileType = file[0].type;
      var fileSize = file[0].size;
      console.log(file,fileType,fileSize);
      var typeRule = ["image/jpg", "image/jpeg", "image/png"];
      if ($.inArray(fileType, typeRule) < 0) {
        alert(input,'檔案格式不符,請上傳 jpg/png 檔案');
        return false;
      }
      if((fileSize/1024) > 150){
        //lert('圖片大於150KB');
        $("#previewDiv").empty(); // 清空當下預覽
        previewFiles(file) // this即為<input>元素
        //--------------
      }
      else{
        console.log('圖片OK');
        $("#previewDiv").empty(); // 清空當下預覽
        previewFiles(file); // this即為<input>元素
      }
    }
    // 預覽圖片,將取得的files一個個取出丟到convertFile() ,IE不支援
    function previewFiles(files) {  
      console.log('previewFiles',files);
      if (files && files.length >= 1) {
        $.map(files, file => {
          convertFile(file)
            .then(data => {
              console.log(data) // 把編碼後的字串輸出到console
              showPreviewImage(data, file.name)
            })
            .catch(err => console.log(err))
        })
      }
     
    }
    // 在頁面上新增<img>
    function showPreviewImage(src, fileName) {
        /*let image = new Image(250) // 設定寬250px
        image.name = fileName
        image.src = src // <img>中src屬性除了接url外也可以直接接Base64字串
        $("#previewDiv").append(image).append(`<p>File: ${image.name}`)*/
        $('#div_previewPic').show();
        $('#btnRemovePic').show();
        $("#previewDiv").html('');
        $("#previewDiv").html('<a href="'+src+'" data-fancybox="gallery">\
          <img src ="'+src+'" alt ="'+fileName+'" width="250"/></a>\
          <p>檔案:'+fileName+'</p>');
    }
    // 使用FileReader讀取檔案,並且回傳Base64編碼後的source ,IE不支援(2022-06-15停用)
    function convertFile(file) {
      return new Promise((resolve,reject)=>{
          // 建立FileReader物件
          let reader = new FileReader()
          // 註冊onload事件,取得result則resolve (會是一個Base64字串)
          reader.onload = () => { resolve(reader.result) }
          // 註冊onerror事件,若發生error則reject
          reader.onerror = () => { reject(reader.error) }
          // 讀取檔案
          reader.readAsDataURL(file)
      });
    }
  </script>
</body>
</html>

2021年7月12日 星期一

[筆記]LineLogin無法登入

問題:

  1. 網址無法進入:
    1. https://access.line.me/oauth2/v2.1/...
  2. 程式中是使用javascript 進行導頁。
解決:

  1. 原因是因為Chrome外掛中有防毒擋掉導頁。(如小紅傘 chrome plugin)
  2. 移除plugin(或停用)。
  3. 或是直接使用連結,不透過javascript處理url。

2021年7月11日 星期日

[筆記]取得bloggerid

 <script src="http://code.jquery.com/jquery-1.10.2.js"></script>

<script>

  var bloggerid=$("[itemprop=blogId]:first").attr('content');

  console.log(bloggerid);

  

</script>


2021年7月6日 星期二

[筆記]拖曳區塊

參考:

  1. https://pjchender.blogspot.com/2017/08/html5-drag-and-drop-api.html
  2. https://www.w3schools.com/html/html5_draganddrop.asp

2021年6月10日 星期四

[筆記]網頁產生PDF相關

參考:

  • [C#][iTextSharp] PDF 套版:
    • https://ithelp.ithome.com.tw/articles/10190232
  • Create HTML 5 charts export them to PDF for free:
    • https://anthonygiretti.com/2015/12/20/create-html-5-charts-export-them-to-pdf-for-free
  • https://gist.github.com/relyky/005f1a3397ee2de43d64a98d927079cc
筆記關鍵字: 

  1. iTextSharp
  2. html canvas to pdf

2021年1月21日 星期四

[筆記]時鐘

  • 百葉窗時間flipclock:
  • 可參考: https://my.ntu.edu.tw/attend/jquery/flipclock/flipclock.css

2019年6月24日 星期一

[筆記]手機瀏覽器Debug工具 vConsole

使用方式:

<script src="https://cdn.jsdelivr.net/npm/vconsole@3.2.0/dist/vconsole.min.js"></script>

<script>

var vConsole = new VConsole();

</script>

2018年5月10日 星期四

[筆記]前端與後端人員開發配合

前端開發人員常常會發生前端程式需要呼叫後端的API或是方法。

這裡提供一個簡易作法,讓大家可以簡易分工。

--

在設計階段,前端人員最常做的方式是寫假資料在要呈現的畫面上。

如<input value=’這是要binding的測試欄位UI’ />,

設計後,可能直接轉移工作項目,讓後端人員去套用此欄位。

或是等到後端人員把API或是規格定義好之後在轉交給前端人員套用。

然後前端人員又要重套用,或是可能需要調整的東西比較多(因為都是假資料)。

所以在撰寫的時候如果有配合binding物件的寫法template相關的framework或libaray,

個人的作法是寫個簡易的框來處理這件事情就可以。



當後端開發完成,只要替換掉相對應的連結與取回結果,變可以無痛替換,

也不太需要等待與(沒溝通好的)重新設計。

*個人與本團隊之經驗,不一定適用其它人,但提供做法,並作個筆記。

2018年4月2日 星期一

[JavaScript]Browser Console 網頁主控台

JavaScript 的程式不太好Debug,所以我們配合Browser Console,
來檢視目前程式發生什麼錯誤或是執行到什麼階段(配合log)。SNAGHTML4d8e56f

以Chrome為例,開啟【開發人員工具】。(或F12)

此時我們可以發現Console中可能會存在一些資料的log。

設計師在撰寫JavaScript時,會將一些資訊log下來,方便檢視與瀏覽。

image

如何使用:

  • Console中可能會記錄資料未載入成功的相關訊息。
    • 多半以紅字顯示相關錯誤訊息,以yahoo為例。SNAGHTML50284d4
  • 設計師撰寫JavasScript:
    • <script>    console.log(‘這是log訊息’);//log</script>

結論:

當程式發生錯誤時,如何快速的讓開發人員了解發生了什麼事情。

除了擷取錯誤畫面之外,配合著Console Log也是一個好的方式。

2017年6月7日 星期三

[筆記]JSLINQ

Ex:
<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.min.js"></script>
<script>
console.log(GetList());
function GetList()
{
var arr = [{'Email':'a@gmail.com','Name':'a'},
{'Email':'a@gmail.com','Name':'a2'},
{'Email':'b@gmail.com','Name':'b'},
{'Email':'c@gmail.com','Name':'c'}];
arr = Enumerable.From(arr) .Distinct(
function (x) { return x.Email; }) .Select(function (a) { return a; }).ToArray();
return arr;
}
</script>

2016年10月12日 星期三

[筆記]Json Post 限制

參考:

如果要加大長度,在web.config中使用:

<appSettings>
  <add key="aspnet:MaxJsonDeserializerMembers" value="150000" />
</appSettings>

2016年6月29日 星期三

讀取GoogleSheet資料,並透過範本排版

讀取Googe Sheet的JSON資料,並透過JQuery.tmpl範本來進行排版。

結果

補充:Google Sheet須發佈到網路,才可以使用JSON。

snip_20160629174502

2016年6月6日 星期一

[筆記]動態載入js

var apiurl = ‘abc.js';
var jsFile = document.createElement("script");
jsFile.setAttribute("type","text/javascript");
jsFile.setAttribute("src", apiurl);
document.getElementsByTagName("head")[0].appendChild(jsFile);

2016年1月22日 星期五

Javascript 月份轉數字

("JanFebMarAprMayJunJulAugSepOctNovDec").indexOf('Jan')/3+1

結果:

Jan=>1,Feb=>2…

2015年8月30日 星期日

JavaScript Note

數字與字串相加:

  • 'a'+10=>a10 型態會以左邊為主
  • '2'+4=>24
  • 若想變成數值形態要做轉型的動作
  • var num1='2';
    var num2=4;
    var result = num1+num2;=>24
    var result = Number(num1)+num2;=>6
    var result = +num1+num2;=>6
    • +num1:中間不可以有空白,會把字串轉成數字
    • Number():轉型數字

2014年12月13日 星期六

JQuery跨網域抓取頁面

同上篇說明,還是要透過第三方程式來處理。

以下為yahoo apis的範例:

JQuery讀取跨網域XML的方法

Javascript沒辦法直接跨網域存取資料。

可能要透過本地程式處理,或是透過第三方程式來處理。

常見的jQuery外掛,如:JGFeed

有趣的是,其實他還是透過google api去處理跨網域資料存取。

以下為測試範例: