Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 日韩精品电影在线,最新欧美精品,欧美在线影院

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          技術貼:一篇文章看懂鏈接(超鏈接)設計

          人人都是產品經理【起點學院】,BAT實戰派產品總監手把手系統帶你學產品、學運營。

          產品設計時細節是產品經理最頭疼的問題,一個button,一個鏈接都要考慮太多的細節問題。作者整理了常見的一些功能設計問題,一篇文章看懂這些功能設計。來學習吧。

          定義

          鏈接也稱為超鏈接,所謂的超鏈接是指從一個網頁指向一個目標的連接關系,這個目標可以是另一個網頁,也可以是相同網頁上的不同位置,還可以是一個圖片,一個電子郵件地址,一個文件,甚至是一個應用程序。而在一個網頁中用來超鏈接的對象,可以是一段文本或者是一個圖片。當瀏覽者單擊已經鏈接的文字或圖片后,鏈接目標將顯示在瀏覽器上,并且根據目標的類型來打開或運行。

          樣式

          鏈接可以是一個字或是一段字這樣的文本,也可以是一個按鈕,一張圖片,當你點擊后跳轉到另一個目標,當你把鼠標指針移到某個鏈接時會變成一個小手,當然在手機上沒有這一特點。

          1. 文本樣式的鏈接

          文本樣式的鏈接一般在搜索引擎的網站呈現藍色字樣,大多會在下面加上下劃線以便識別,不過現如今考慮到不影響文本的可讀性與用戶體驗,逐漸取消了下劃線。而在一些別的網站考慮到界面設計風格各方面的因素而不用藍色。

          谷歌的文本鏈接是藍色,沒有下劃線

          百度的文本鏈接也是藍色,關鍵詞是紅色,有下劃線

          而京東的文本鏈接有灰色,有白色,有黑色

          2. 按鈕樣式的鏈接

          按鈕樣式的鏈接比文本樣式的更容易識別,每一個按鈕都是一樣鏈接。

          按鈕樣式鏈接

          3. 圖片樣式的鏈接

          圖片樣式的鏈接可以是單獨的一張圖片,也可以是文字與按鈕一起組成一張圖片,只是鼠標指針掃過圖片的任何一個部位都會變成小手。

          如桌面彈出這種游戲小窗口的圖片式鏈接

          由文字/圖/按鈕樣式一起構成的一張圖片式按鈕,鼠標可以點擊圖中任何一部位

          打開方式

          鏈接打開的方式有三種:第一種是在當前頁面刷新跳轉,國外的網站大多是這樣的打開式;第二種是在新標簽頁面打開鏈接,國內大多采用這種;第三種是提示用APP打開。當然現在出現了一種新的打開方式,那就是二維碼掃描。

          提示用美拍APP打開

          類型

          按照連接路徑的不同,網頁中超鏈接一般分為以下3種類型:內部鏈接,錨點鏈接和外部鏈接。

          鏈接還可以分為動態鏈接和靜態鏈接。動態超鏈接指的是可以通過改變HTML代碼來實現動態變化的鏈接,例如我們可以實現將鼠標移動到某個文字鏈接上,文字就會象動畫一樣動起來或改變顏色的效果,也可以實現鼠標移到圖片上圖片就產生反色或朦朧等等的效果。而靜態鏈接,顧名思義,就是沒有動態效果的鏈接。

          1. 內部鏈接

          與外部鏈接(即反向鏈接)相反,內部鏈接是指同一網站域名下的內容頁面之間互相鏈接。如頻道、欄目、終極內容頁之間的鏈接,乃至站內關鍵詞之間的Tag鏈接都可以歸類為內部鏈接,因此內部鏈接我們也可以稱之為站內鏈接,對內部鏈接的優化其實就是對網站的站內鏈接的優化。

          2. 錨點鏈接

          HTML中的鏈接,正確的說法應該稱作"錨點",它命名錨點鏈接(也叫書簽鏈接)常常用于那些內容龐大繁瑣的網頁,通過點擊命名錨點,不僅讓我們能指向文檔,還能指向頁面里的特定段落,更能當作"精準鏈接"的便利工具,讓鏈接對象接近焦點。便于瀏覽者查看網頁內容。類似于我們閱讀書籍時的目錄頁碼或章回提示。在需要指定到頁面的特定部分時,標記錨點是最佳的方法。

          3. 外部鏈接

          外部鏈接,又常被稱為:“反向鏈接”或“導入鏈接”,是指通過其他網站鏈接到你的網站的鏈接。

          外部鏈接指的是針對搜索引擎,與其它站點所做的友情鏈接。高質量的外部鏈接指:和你的網站建立鏈接的網站知名度高,訪問量大,同時相對的外部鏈接較少,有助于快速提升你的網站知名度和排名的其他網站的友情鏈接。

          如果按照使用對象的不同,網頁中的鏈接又可以分為:文本超鏈接,圖像超鏈接,E-mail鏈接,錨點鏈接,多媒體文件鏈接,空鏈接等。

          鏈接是一種對象,它以特殊編碼的文本或圖形的形式來實現鏈接,如果單擊該鏈接,則相當于指示瀏覽器移至同一網頁內的某個位置,或打開一個新的網頁,或打開某一個新的WWW網站中的網頁。

          鏈接狀態

          鏈接在交互上一般會呈現4種狀態,即默認狀態/懸停時狀態/點擊時狀態/點擊后狀態。比如谷哥網站的交互體驗。如下圖:

          點擊前

          懸停時,下面浮現半透明線條

          點擊時,有波紋暈開的動態效果

          點擊后,下面線條粗

          有時候是3種狀態,比如百度網和知乎應用:

          默認狀態

          點擊時鏈接變紅

          點擊后鏈接變成紫色

          IOS系統知乎應用的3種狀態,而在Android系統沒有用力點擊這一狀態。

          默認狀態

          點擊狀態

          用力點擊會彈出預覽小窗口

          有些時候只有2種狀態,如下圖谷歌網:

          默認和點擊后狀態一樣

          鼠標懸停時出現下劃線

          默認狀態

          點擊時

          而有時候比如在APP里有時候就一直只有一種狀態,也可以稱靜態鏈接,之前的可以稱之為動態鏈接。在不同的使用場景會因為當時的情況選擇最合適的交互體驗設計。有的情況下還會加上點擊的音效,使用戶體驗更暢快,這在移動端用的使用情況多一些。

          總之鏈接是網頁不可缺少的構成部分,每一個鏈接的呈現都是經過深思熟慮的。

          作者:潘瑤瓊(簡書作者)

          本文由 @潘瑤瓊 授權發布于人人都是產品經理,未經作者許可,禁止轉載。

          、前言

          1. 微信公眾號開發 (1) 微信接入認證成為開發者
          2. 微信公眾號開發 (2) 消息處理
          3. 微信公眾號開發 (3) 菜單處理

          本文將實現


          1. 網頁授權
          2. 獲取用戶基本信息

          網頁授權流程


          1. 填寫網頁授權回調域名
          2. 引導用戶進入授權頁面同意授權,獲取code
          3. 通過code 換 取網頁授權access_token 和 openid (注:與基礎支持中的access_token不同)
          4. 刷新網頁授權access_token,避免過期(可選擇性操作)
          5. 通過網頁授權access_token和openid獲取用戶基本信息(支持UnionID機制)

          二、填寫網頁授權回調域名

          測試號在如下地址中,體驗接口權限表 -> 網頁帳號 -> 修改http://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index

          注:勿加 http:// 等協議頭!

          三、授權相關接口


          溫馨小提示:接口相關參數說明可直接查看微信官方文檔 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

          1、用戶授權頁面


          https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect


          參數
          是否必須 說明
          appid

          公眾號的唯一標識
          redirect_uri

          授權后重定向的回調鏈接地址, 請使用 urlEncode 對鏈接進行處理 response_type

          返回類型,請填寫code
          scope

          應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,只能獲取用戶openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到昵稱、性別、所在地。并且, 即使在未關注的情況下,只要用戶授權,也能獲取其信息 ) state

          重定向后會帶上state參數,開發者可以填寫a-zA-Z0-9的參數值,最多128字節 #wechat_redirect 是
          無論直接打開還是做頁面302重定向時候,必須帶此參數


          2、通過code換取網頁授權access_token和openid


          【GET請求】https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code


          參數
          是否必須 說明
          appid

          公眾號的唯一標識
          secret

          公眾號的appsecret
          code

          填寫第一步獲取的code參數 grant_type 是
          填寫為authorization_code


          3、刷新access_token(如果需要)


          【GET請求】https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN


          參數
          是否必須 說明
          appid

          公眾號的唯一標識
          grant_type

          填寫為refresh_token
          refresh_token 是
          填寫通過accesstoken獲取到的refreshtoken參數


          4、獲取用戶信息(需scope為 snsapi_userinfo)


          【GET請求】https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN


          參數
          描述
          access_token 網頁授權接口調用憑證,注意:此accesstoken與基礎支持的accesstoken不同 openid
          用戶的唯一標識
          lang
          返回國家地區語言版本,zhCN 簡體,zhTW 繁體,en 英語


          5、檢驗授權憑證(access_token)是否有效


          【GET請求】https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID


          參數
          描述
          access_token 網頁授權接口調用憑證,注意:此accesstoken與基礎支持的accesstoken不同 openid
          用戶的唯一標識



          注:下面部分只貼出了重要代碼部分,完整案例可參考文末提供的源碼



          四、引導用戶進入授權頁面同意授權 -> 獲取code


          方式①:通過創建鏈接式菜單(view)

          方式②:直接發送授權url消息,用戶點擊進入授權


          https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx62d91f5c16d6e8e0&redirect_uri=http://m9adhq.natappfree.cc/api/weixin/basic/getOpenId&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

          授權相關的幾個api接口如下:

          五、通過code換取網頁授權access_token和openid(與基礎支持中的access_token不同)

          用戶同意授權后,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE

          code說明 : code作為換取access_token的票據,每次用戶授權帶上的code將不一樣,code只能使用一次,5分鐘未被使用自動過期。

          注:小編這里拿到access_token和openid之后將頁面重定向到了獲取用戶信息的接口,然后返回json用戶信息數據~

          public void getOpenId(HttpServletRequest request, HttpServletResponse response) {
              String code = request.getParameter("code");
              String state = request.getParameter("state");
          
              log.debug("======================================= \n code值:" + code);
          
              String responseContent = restTemplate.getForObject(Constants.AUTH_GET_ACCESS_TOKEN_AND_OPENID
                      .replace("APPID", Constants.APP_ID)
                      .replace("SECRET", Constants.APP_SECRET)
                      .replace("CODE", code), String.class);
              JSONObject result = JSON.parseObject(responseContent);
              String accessToken = result.getString("access_token");
              String openid = result.getString("openid");
              String refreshToken = result.getString("refresh_token");
          
              log.debug("======================================= \n access_token值:" + accessToken + "\n  openid值:" + openid);
          
              String redirectUrl = "http://m9adhq.natappfree.cc/api/weixin/basic/getUserInfo?openid=" + openid + "&access_token=" + accessToken;
              try {
                  // 授權之后重定向到指定URL(這里是跳轉到獲取用戶基本信息接口)
                  response.sendRedirect(redirectUrl);
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }


          六、獲取微信用戶基本信息


          public WeixinUserInfoVO getUserInfo(String openId, String accessToken) {
              WeixinUserInfoVO weixinUserInfoVO = null;
              String responseContent = restTemplate.getForObject(Constants.AUTH_GET_USER_INFO
                      .replace("ACCESS_TOKEN", accessToken)
                      .replace("OPENID", openId), String.class);
              weixinUserInfoVO = JSON.parseObject(responseContent, WeixinUserInfoVO.class);
              return weixinUserInfoVO;
          }

          其中WeixinUserInfoVO基本信息類

          @Data
          @ApiModel(description = "微信用戶基本信息")
          public class WeixinUserInfoVO {
          
              @ApiModelProperty(value = "用戶的唯一標識")
              private String openid;
          
              @ApiModelProperty(value = "用戶昵稱")
              private String nickname;
          
              @ApiModelProperty(value = "用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知")
              private Integer sex;
          
              @ApiModelProperty(value = "用戶個人資料填寫的省份")
              private String province;
          
              @ApiModelProperty(value = "普通用戶個人資料填寫的城市")
              private String city;
          
              @ApiModelProperty(value = "國家,如中國為CN")
              private String country;
          
              @ApiModelProperty(value = "用戶頭像,最后一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空。若用戶更換頭像,原有頭像URL將失效。")
              private String headimgurl;
          
              @ApiModelProperty(value = "用戶特權信息,json 數組,如微信沃卡用戶為(chinaunicom)")
              private String privilege;
          
              @ApiModelProperty(value = "只有在用戶將公眾號綁定到微信開放平臺帳號后,才會出現該字段。")
              private String unionid;
          
              @ApiModelProperty(value = "返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語")
              private String language;
          
          }

          響應數據如下:

          這里獲取到用戶信息之后,也就可以寫頁面,然后進行自己的業務交互了... (openid:微信用戶的唯一標識)

          七、刷新access_token(如果需要)

          由于accesstoken擁有較短的有效期,當accesstoken超時后,可以使用refreshtoken進行刷新,refreshtoken有效期為30天,當refresh_token失效之后,需要用戶重新授權。

          public String refreshAccessToken(String appId, String refreshToken) {
              String responseResult = restTemplate.getForObject(Constants.AUTH_REFRESH_ACCESS_TOKEN
                      .replace("APPID", appId)
                      .replace("REFRESH_TOKEN", refreshToken), String.class);
              JSONObject jsonObject = JSON.parseObject(responseResult);
              return jsonObject.getString("access_token");
          }


          八、檢驗授權憑證(access_token)是否有效


          public WeixinResponseResult checkAccessToken(String openId, String accessToken) {
               String responseResult = restTemplate.getForObject(Constants.AUTH_CHECK_ACCESS_TOKEN
                       .replace("ACCESS_TOKEN", accessToken)
                       .replace("OPENID", openId), String.class);
               WeixinResponseResult weixinResponseResult = JSON.parseObject(responseResult, WeixinResponseResult.class);
               if (weixinResponseResult.getErrcode() != 0) {
                   log.error("授權憑證無效:" + responseResult);
                   throw new MyException(weixinResponseResult.getErrcode(), weixinResponseResult.getErrmsg());
               }
               return weixinResponseResult;
           }


          九、總結


          1. 微信公眾號開發網上有很多教程,但針對于每一個開發者的環境以及語言不同而有所差異,建議認真看微信提供的官方文檔去學習,大致也就是查看文檔 封裝數據 調微信api接口 業務處理
          2. 關于微信公眾號開發小編也已經寫了幾篇了,大家在學習完微信官方提供的原始api之后,GitHub以及Gitee等上面有很多大神已經封裝好了優秀的開源sdk,這時候我們有了一定的微信開發基礎就可以去閱讀參考學習
          3. 小編建議大家在學習遇到問題,查看別人如何實現以及解決問題的時候,更多的是去學習思維方式處理邏輯,而不是拿到就跑,雖然寫代碼也不過就是復制黏貼運行完無bug就萬事大吉,但我們也要 知其然知其所以然 !

          本文案例demo源碼

          https://gitee.com/zhengqingya/java-workspace

          近做一個項目,要通過掃一掃查詢對應的信息,由于現在已經有一部分二維碼已被生成,為了兼顧已生成的二維碼,所以需要使用網頁的掃一掃功能去完成項目。

          項目使用技術棧:vue2

          方案一、js 原生

          熱心的同事幫我已經找好了網頁掃一掃 DEMO,給我說已經測試過了,Andriod 和 IOS 都可以正常使用。

          使用 QRScanner 插件

          其原理是通過 navigator.mediaDevices.getUserMedia 來獲取用戶的攝像頭使用權限:

          navigator.mediaDevices.getUserMedia(constraints)
          .then(res => {  })
          .catch(err => {  })

          使用自己的 蘋果11 測試完全正常,放置服務器上,讓同事掃碼的時候,真的是異常百態!存在的問題:

          1、網頁必須使用瀏覽打開,不可以使用微信內置瀏覽器。如果是微信打開,會提示 “對不起,未識別到掃描設備”。

          2、有些手機,攝像頭一直是前置攝像頭,通過 facingMode 設置無效:

          { facingMode: { exact: "environment" } }

          3、非手機內置瀏覽器,如:QQ、UC、百度等瀏覽器APP內,會存在找不到掃瞄設備。

          4、最重要的是用戶體驗差。用戶需要在瀏覽器打開,授權之后,才能進行掃碼。

          5、開發需要調試的設備較多。navigator.mediaDevices.getUserMedia 兼容性差。


          方案二、vue-qr 插件

          官方文檔:https://www.npmjs.com/package/vue-qr

          該插件不僅支持 vue2 ,還支持 vue3 。功能強大,能夠生成二維碼,還能夠掃描、識別二維碼,解析二維碼。

          git 地址:https://github.com/MuGuiLin/QRCode

          • 有一個 HTML 版本。
          • 有一個 vue.js 版本。

          測試地址:Demo:https://muguilin.github.io/QRCode

          存在問題:

          1、網頁必須使用瀏覽打開,不可以使用微信內置瀏覽器。如果是微信打開,會提示 “對不起,未識別到掃描設備”。

          2、非手機內置瀏覽器,如:QQ、UC、百度等瀏覽器APP內,會存在找不到掃瞄設備。

          3、最重要的是用戶體驗差。用戶需要在瀏覽器打開,授權之后,才能進行掃碼。


          方案三、微信掃一掃

          我把測試地址發到公司群,讓同事幫我測試的時候,我發現程序員測試都說沒問題,非程序員基本都是直接使用微信,點擊掃一掃的時候,統一都是:“ 對不起,未識別到掃描設備 ”。轉念一想,掃一掃好像是給開發同事做的。

          轉換思路,讓用戶在微信內直接點進去之后就可以進行掃碼!所以選擇 微信網頁開發 -> 調用微信掃一掃。

          優點:

          1、用戶使用方便,直接可以使用微信掃碼。

          2、開發方便,不用再考慮兼容安卓和ios的各種瀏覽器。

          實現步驟:

          • 1、引入

          引入方式1:

          index.html 入口文件處引入 js 插件

          <script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

          在 wx 使用頁面處,可以直接通過 window.wx 引用。

          引入方式2:

          npm install weixin-js-sdk

          在需要使用的頁面處,引入 wx 模塊:import wx from 'weixin-js-sdk'

          • 2、配置
          wx.config({
           debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
           appId: '', // 必填,公眾號的唯一標識
           timestamp: , // 必填,生成簽名的時間戳
           nonceStr: '', // 必填,生成簽名的隨機串
           signature: '',// 必填,簽名
           jsApiList: [] // 必填,需要使用的JS接口列表
          });
          • 3、調用方法
          wx.scanQRCode({
           needResult: 0, // 默認為0,掃描結果由微信處理,1則直接返回掃描結果,
           scanType: ["qrCode","barCode"], // 可以指定掃二維碼還是一維碼,默認二者都有
           success: function (res) {
            var result = res.resultStr; // 當needResult 為 1 時,掃碼返回的結果
           }
          });

          具體的實現步驟以及可能遇到的問題都總結到《手把手教你調用微信掃一掃!三分鐘包會》,需要的自行查閱。


          主站蜘蛛池模板: 国产免费一区二区三区不卡| 狠狠色成人一区二区三区| 一区二区三区www| 国产一区二区在线看| 精品免费国产一区二区三区| 日韩制服国产精品一区| 国产日韩精品一区二区在线观看播放 | 麻豆高清免费国产一区| 三上悠亚日韩精品一区在线| 韩国精品福利一区二区三区| 精品无码人妻一区二区三区| 亚洲无线码一区二区三区| 一区二区三区电影在线观看| 精品国产一区二区二三区在线观看| 人妻夜夜爽天天爽爽一区| 精品福利一区二区三区| 天天躁日日躁狠狠躁一区| 亚洲av日韩综合一区久热| 日韩一区二区在线视频| 文中字幕一区二区三区视频播放| 国产亚洲情侣一区二区无码AV| 日本人真淫视频一区二区三区| 无码午夜人妻一区二区不卡视频| 国产乱人伦精品一区二区| 亚洲AV无码一区二区三区在线 | 在线观看国产一区二三区| 日韩一区二区电影| 亚洲日韩精品一区二区三区 | 亚洲熟妇av一区二区三区| 亚洲国产精品第一区二区三区| 精品不卡一区中文字幕| 日本在线视频一区| 武侠古典一区二区三区中文| 色婷婷av一区二区三区仙踪林| 久久久精品人妻一区二区三区蜜桃| 日韩精品乱码AV一区二区| 射精专区一区二区朝鲜| 国产电影一区二区| 无码一区二区三区中文字幕| 国产无人区一区二区三区| 亚洲国产一区二区视频网站|