" " " "
kb_mappingselector는 키보드 레이아웃 선택 상자의 ID이고, kb_langselector는 입력 방법 선택 상자의 ID이며, kb_langselector는 우리가 원하는 ID입니다.
ID로는 수정이 가능하기 때문에 생성이 완료된 후에만 ID를 얻을 수 있기 때문에 가상 키보드를 로딩한 후에 코드를 작성했습니다.
다음 코드는 JQuery 프레임워크를 사용하므로 참조가 필요하므로 정상적으로 사용할 수 있습니다.
함수 테스트(){
$("#kb_langselector").empty().append("English 中文 option> ;").change(함수 (){
VirtualKeyboard.switchLayout(this.value); false 반환;
});
}
테스트 후 로딩이 10%에서 중단되고 페이지에 JS 오류가 발생하는 문제를 발견했습니다.
오류 설명을 보면 제가 만든 옵션에 문제가 있는 것으로 추측했지만, 여러 번 추적하고 디버깅한 후에도 구체적인 문제를 찾을 수 없었던 영웅이 오류를 발견하면 알려주시면 감사하겠습니다. !
오랜 시간 지속되는 오류가 발생하면 생각을 바꿔보세요!
초기 아이디어가 실패해서 마음을 바꿨습니다. 제가 만든 것에 문제가 있었기 때문에 직접 만들 수는 없지만 추가 항목은 필요하지 않습니다.
이 아이디어에 따라 로딩 코드를 다시 연구한 결과 입력 방식으로 로드된 JS가 Jsvkjscriptslayoutslayouts.js에 정의되어 있음을 발견했습니다. 그래서 중복되는 옵션은 과감히 삭제하고 중국어 병음과 미국식 두 가지 옵션만 남겨 두었습니다. 수정 후의 렌더링은 다음과 같습니다. 중국어와 영어 두 가지 옵션만 있어 훨씬 깔끔합니다.
내가 원하는 건 이런 게 아니야!
중국어와 영어 간 전환이 구현되었지만 조작이 충분히 편리하지 않습니다. 필요한 것은 키보드에 전환 키를 추가하는 것입니다.
먼저 스킨 파일인 Jsvkjscriptscssplat_graybutton_set.png를 찾아서 버튼을 직접 추가해보겠습니다!
원본 사진 :
수정 후:
그림을 바꾸는 것만으로는 충분하지 않습니다. 버튼은 스타일 시트에 위치하며 계속해서 스타일 시트를 수정합니다! 스타일 시트 Jsvkjscriptscssplat_graykeyboard.css 끝에 다음 코드를 추가합니다.
#kbDesk div#kb_binput_method {
플로트: 그렇죠;
너비: 102px;
}
#kbDesk div#kb_binput_method a {
배경 위치: -453px 0px;
}
#kbDesk div#kb_binput_method.kbButtonHover a {
배경 위치: -453px -38px;
}
#kbDesk div#kb_binput_method.kbButtonDown a {
배경 위치: -453px -76px;
}
다음으로 JS 파일에서 버튼에 대한 이벤트를 정의해야 합니다. virtualkeyboard.js를 열고
를 찾으세요.
변수 C = {
14: '백스페이스',
15: '탭',
28: '입력',
29: '대문자',
41: 'shift_left',
52: 'shift_right',
53: '델',
54: 'ctrl_left',
55: 'alt_left',
56: '공간',
57: 'alt_right',
58: 'ctrl_right'
};
아래에 59: 'input_method'를 추가하세요. 'ctrl_right' 뒤에 쉼표를 추가하는 것을 잊지 마세요. 수정 후:
변수 C = {
14: '백스페이스',
15: '탭',
28: '입력',
29: '대문자',
41: 'shift_left',
52: 'shift_right',
53: '델',
54: 'ctrl_left',
55: 'alt_left',
56: '공간',
57: 'alt_right',
58: 'ctrl_right',
59: '입력_방법'
};
계속해서 버튼 클릭 응답 코드 찾기:
var d = 함수 (i) {
var e = DOM.getParent(i.srcElement || i.target, 'a');
if (!e || e.parentNode.id.indexOf(Q) < 0) return;
e = e.parentNode;
var iI = X;
var il = e.id.substring(Q.length);
스위치(il) {
케이스 "대문자":
iI = iI ^s;
휴식;
케이스 "shift_left":
케이스 "shift_right":
if (i.shiftKey) break;
iI = iI ^ Z;
휴식;
케이스 "alt_left":
케이스 "alt_right":
케이스 "ctrl_left":
케이스 "ctrl_right":
iI = iI ^ (i.altKey
휴식;
기본값:
if (_) DOM.CSS(e).addClass(y.buttonDown);
휴식
}
if (X != iI) {
B(iI);
b();
}
i.preventDefault();
i.stopPropagation();
};
修改为:
var d = 함수 (i) {
var e = DOM.getParent(i.srcElement || i.target, 'a');
if (!e || e.parentNode.id.indexOf(Q) < 0) return;
e = e.parentNode;
var iI = X;
var il = e.id.substring(Q.length);
스위치(il) {
케이스 "대문자":
iI = iI ^s;
휴식;
케이스 "input_method":
if (document.getElementById("kb_langselector").value == '미국 미국') {
VirtualKeyboard.switchLayout("CN 중국어 간체 병음");
}
그렇지 않으면 {
VirtualKeyboard.switchLayout("미국 미국");
}
휴식;
케이스 "shift_left":
케이스 "shift_right":
if (i.shiftKey) break;
iI = iI ^ Z;
휴식;
케이스 "alt_left":
케이스 "alt_right":
케이스 "ctrl_left":
케이스 "ctrl_right":
iI = iI ^ (i.altKey
휴식;
기본값:
if (_) DOM.CSS(e).addClass(y.buttonDown);
휴식
}
if (X != iI) {
B(iI);
b();
}
i.preventDefault();
i.stopPropagation();
};
既然有了按钮,就不需要显示下面的下拉框了,所以,给它隐藏掉!
OK,大功告成!看下效果图
外观功能搞定了, 但一看它的文件夹,足足7M多,精简!精简过程就不写啦,精简完成后:
写了这么多,谢谢你能把它看完,最后放上完成 之后的源码!
http://www.jb51.net/jiaoben/228716.html