❶ 如何在WebGL全景圖上做標記
一般獲取景區上某個地址的標記,都是通過手動獲取的。因為這些標記是無規律可尋的。所以我們就得考慮如何通過手動去獲取3D圖上的某個地址。人機交互時通過滑鼠來操作,但滑鼠是2D坐標,需要轉換到對應的3D坐標上。Three.js為我們提供了Raycaster對象,我們可以很輕松的獲取到一個2D點對應的3D坐標。先聲明幾個對象:
var raycasterCubeMesh;
var raycaster = new THREE.Raycaster();
var mouseVector = new THREE.Vector3();
var tags = [];
這里需要在document上注冊mousemove事件,實時獲取滑鼠對應的3D坐標。事件代碼如下:
function onMouseMove(event){
mouseVector.x = 2 * (event.clientX / window.innerHeight) - 1;
mouseVector.y = - 2 * (event.clientY / window.innerHeight) + 1;
raycaster.setFromCamera(mouseVector.clone(), camera);
var intersects = raycaster.intersectObjects([cubeMesh]);
if(raycasterCubeMesh){
scene.remove(raycasterCubeMesh);
}
activePoint = null;
if(intersects.length > 0){
var points = [];
points.push(new THREE.Vector3(0, 0, 0));
points.push(intersects[0].point);
var mat = new THREE.MeshBasicMaterial({color: 0xff0000, transparent: true, opacity: 0.5});
var sphereGeometry = new THREE.SphereGeometry(100);
raycasterCubeMesh = new THREE.Mesh(sphereGeometry, mat);
raycasterCubeMesh.position.(intersects[0].point);
scene.add(raycasterCubeMesh);
activePoint = intersects[0].point;
}
}
代碼中的大部分我已經在「如何實現對象交互」有介紹。這里只介紹和當前功能相關代碼。intersects包含了滑鼠當前位置下拾取到的3D對象集合。如果長度大於0,表示已經拾取到3D對象了。由於我們給intersectObjects函數只傳遞了cubeMesh對象(即全景圖),所以intersects的長度肯定為1。intersects[0].point表示滑鼠投射到cubeMesh對象表面上的坐標。這個坐標正是我們需要的3D標記點。所以我把這個點存儲在activePoint。raycasterCubeMesh直接用交互點作為中心畫的一個球體,滑鼠移動這個球體也就跟著移動。
滑鼠移動時,能夠獲取到3D坐標了。如何確認這個坐標就是我們需要的?這里還得 給docuent注冊一個mousedown事件。通過右鍵點擊確認。注冊事件如下:
function onMouseDown(event){
if(event.buttons === 2 && activePoint){
var tagMesh = new THREE.Mesh(new THREE.SphereGeometry(1), new THREE.MeshBasicMaterial({color: 0xffff00}));
tagMesh.position.(activePoint);
tagObject.add(tagMesh);
var tagElement = document.createElement("div");
tagElement.innerHTML = "<span>標記" + (tags.length + 1) + "</span>";
tagElement.style.background = "#00ff00";
tagElement.style.position = "absolute";
tagElement.addEventListener("click", function(evt){
alert(tagElement.innerText);
});
tagMesh.updateTag = function(){
if(isOffScreen(tagMesh, camera)){
tagElement.style.display = "none";
}else{
tagElement.style.display = "block";
var position = toScreenPosition(tagMesh, camera);
tagElement.style.left = position.x + "px";
tagElement.style.top = position.y + "px";
}
}
tagMesh.updateTag();
document.getElementById("WebGL-output").appendChild(tagElement);
tags.push(tagMesh);
}
}
代碼第一行有if判斷,只有滑鼠右鍵觸發,並且activePoint不為空,才執行下面的代碼。首先創建一個球體tagMesh並且設置坐標為activePoint,然後把它添加到tagObject對象中。tagObject是一個Object3D對象,用來存放所有的tagMesh,便於統一管理。
接著代碼創建了一個tagElement元素,設置樣式和內容。並且附加到WebGL容器中。tagMesh自定義了updateTag函數,里邊調用了兩個特別重要的函數:toScreenPosition和isOffScreen。這里先不忙介紹updateTag函數。接下來通過介紹這兩個函數來回答剩下的問題。
❷ android怎麼模擬用戶在webview中對應的坐標的點擊事件
不知道你是要知道「怎麼模擬按鈕的點擊事件」還是要知道「這個東西是怎麼調上來的」? 1、模擬點擊事件,可以用調用Button的onClick的方法。 2、這個點擊事件是觸到屏幕後,觸摸屏驅動首先得到這個消息,然後根據WindowManager裡面記錄的信息分發給ViewRoot,然後就一直發,就像生活委員發信件一樣,最終發給那個被點擊的View,沒人處理就報廢。
❸ 在webview中的點擊事件和shouldstartloadwithrequest方法沖突
如何將點擊鏈接後的網頁也顯示呢,於是邊Google邊查看Android文檔,找到找到了一個方法,以下使用源碼解釋。
package demo.androidyue.webview;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewDemoActivity extends Activity {
private WebView webView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化WebView
this.initWebView();
}
/*
* 初始化WebView
*/
private void initWebView(){
//從布局文件中擴展webView
this.webView=(WebView)this.findViewById(R.id.webview);
//為WebView設置WebViewClient處理某些操作
this.webView.setWebViewClient(new webViewClient());
//載入地址
this.webView.loadUrl("h ttp ://10.0.2.2");
}
class webViewClient extends WebViewClient{
//重寫shouldOverrideUrlLoading方法,使點擊鏈接後不使用其他的瀏覽器打開。
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
//如果不需要其他對點擊鏈接事件的處理返回true,否則返回false
return true;
}
}
❹ webBrowser中怎麼為html元素添加點擊事件
找到元素,再綁定事件即可;
如元素ele添加點擊事件:
ele.Click+=new EventHandler(ele_Click);
點擊事件:
private void ele_Click(object sender,EventArgs e)
{
//點擊代碼
}
❺ 問一下,怎麼實現web端檢索麵板的點擊事件,點擊任意一條,跳轉到其他頁面,謝謝了
事件綁定,處理
你看看你的檢索麵板有沒有冒泡事件或是否支持綁定處理函數,如果有的直接用就行了,如果沒有就自己綁定對應dom,然後做跳轉處理
❻ Java Web中jsp頁面的按鈕點擊事件求解~
1、你這個提交按鈕會有一個onclick事件
<input type="button" value="提交" onclick="a();"/>/*這個a()是指一個js事件*/
<script>
function a(){
alert(1);
/*這里可以去處理事件*/
}
</script>
2、你說的action=""是說form表單裡面的"action"嗎?
比如說:<form action="" id="" name="">這個action是指你的form表單要提交數據到指定的路徑。
❼ webview怎麼不支持JS調用的點擊事件
可以通過插件jquery.mobile.js 來實現,因為webview的點擊事件都是通過touch 或者 tap 來觸發的,所以..你的綁定方式可能需要改下了。
❽ 用html載入UI 怎麼獲取WebView中的每一個小項的點擊事件
1. Web網頁部分,需要用Javascript實現監聽點擊事件,獲取被點擊項及其電話號碼,用jQuery等庫,這個功能很容易實現。
2. 在點擊事件裡面,調用「打電話」或「發簡訊」方法,例如"window.JSExt.call(number);"。
3. 在Java代碼裡面,實現「打電話」/「發簡訊」的介面,並注冊到WebView裡面,這樣Javascript才能調用
❾ C# web 直接點擊按鈕與調用按鈕的點擊事件有什麼不同
直接點擊按鈕是系統產生消息去驅動事件,執行事件綁定的程序代碼,調用按鈕的點擊事件和普通的方法調用是相同的