#javascript #cursor #doctype
#javascript #курсор #doctype
Вопрос:
если вы знакомы с отношениями между javascript и объявлением doctype, мы будем признательны за любую помощь. я использую WordPress и пытаюсь включить скрипт курсора на страницу. скрипт работает без doctype wordpress по умолчанию, с ним — нет. есть предложения, как заставить скрипт cursor работать, пожалуйста?
Объявление HTML doctype для моего WordPress:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Код для курсора:
<STYLE type="text/css">
<!--
.kisser {
position:absolute;
top:0;
left:0;
visibility:hidden;
}
-->
</STYLE>
<SCRIPT language="JavaScript1.2" type="text/JavaScript">
<!-- cloak
//Kissing trail
//Visit http://www.rainbow.arch.scriptmania.com for this script
kisserCount = 15 //maximum number of images on screen at one time
curKisser = 0 //the last image DIV to be displayed (used for timer)
kissDelay = 1200 //duration images stay on screen (in milliseconds)
kissSpacer = 30 //distance to move mouse b4 next heart appears
theimage = "cur.png" //the 1st image to be displayed
theimage2 = "small_heart.gif" //the 2nd image to be displayed
//Browser checking and syntax variables
var docLayers = (document.layers) ? true:false;
var docId = (document.getElementById) ? true:false;
var docAll = (document.all) ? true:false;
var docbitK = (docLayers) ? "document.layers['":(docId) ? "document.getElementById('":(docAll) ? "document.all['":"document."
var docbitendK = (docLayers) ? "']":(docId) ? "')":(docAll) ? "']":""
var stylebitK = (docLayers) ? "":".style"
var showbitK = (docLayers) ? "show":"visible"
var hidebitK = (docLayers) ? "hide":"hidden"
var ns6=document.getElementByIdamp;amp;!document.all
//Variables used in script
var posX, posY, lastX, lastY, kisserCount, curKisser, kissDelay, kissSpacer, theimage
lastX = 0
lastY = 0
//Collection of functions to get mouse position and place the images
function doKisser(e) {
posX = getMouseXPos(e)
posY = getMouseYPos(e)
if (posX>(lastX kissSpacer)||posX<(lastX-kissSpacer)||posY>(lastY kissSpacer)||posY<(lastY-kissSpacer)) {
showKisser(posX,posY)
lastX = posX
lastY = posY
}
}
// Get the horizontal position of the mouse
function getMouseXPos(e) {
if (document.layers||ns6) {
return parseInt(e.pageX 10)
} else {
return (parseInt(event.clientX 10) parseInt(document.body.scrollLeft))
}
}
// Get the vartical position of the mouse
function getMouseYPos(e) {
if (document.layers||ns6) {
return parseInt(e.pageY)
} else {
return (parseInt(event.clientY) parseInt(document.body.scrollTop))
}
}
//Place the image and start timer so that it disappears after a period of time
function showKisser(x,y) {
var processedx=ns6? Math.min(x,window.innerWidth-75) : docAll? Math.min(x,document.body.clientWidth-55) : x
if (curKisser >= kisserCount) {curKisser = 0}
eval(docbitK "kisser" curKisser docbitendK stylebitK ".left = " processedx)
eval(docbitK "kisser" curKisser docbitendK stylebitK ".top = " y)
eval(docbitK "kisser" curKisser docbitendK stylebitK ".visibility = '" showbitK "'")
if (eval("typeof(kissDelay" curKisser ")")=="number") {
eval("clearTimeout(kissDelay" curKisser ")")
}
eval("kissDelay" curKisser " = setTimeout('hideKisser(" curKisser ")',kissDelay)")
curKisser = 1
}
//Make the image disappear
function hideKisser(knum) {
eval(docbitK "kisser" knum docbitendK stylebitK ".visibility = '" hidebitK "'")
}
function kissbegin(){
//Let the browser know when the mouse moves
if (docLayers) {
document.captureEvents(Event.MOUSEMOVE)
document.onMouseMove = doKisser
} else {
document.onmousemove = doKisser
}
}
window.onload=kissbegin
// decloak -->
</SCRIPT>
<!--Simply copy and paste just before </BODY> section of your page.-->
<SCRIPT language="JavaScript" type="text/JavaScript">
<!-- cloak
// Add all DIV's of hearts
if (document.all||document.getElementById||document.layers){
for (k=0;k<kisserCount;k=k 2) {
document.write('<div id="kisser' k '" class="kisser"><img src="' theimage '" alt="" border="0"></div>n')
document.write('<div id="kisser' (k 1) '" class="kisser"><img src="' theimage2 '" alt="" border="0"></div>n')
}
}
// decloak -->
</SCRIPT>
Комментарии:
1. Тестирование для браузеров эпохи 4.x? Используя большой стек глобальных данных? Широко используете
eval
? Зацикливаниеonload
? Этот скрипт полон обходных путей для древних браузеров и имеет ужасный, ужасный стиль. Я бы выбросил его и начал с нуля (ну, не совсем, поскольку это скрипт отслеживания курсора, я бы просто выбросил его, а затем ушел, чтобы вздрогнуть на некоторое время).2. Этот скрипт довольно ужасен. Чего вы действительно хотите достичь? Захватывать старые скрипты из весьма сомнительных источников, подобных этому, не лучший способ заставить работать современный веб-сайт.
Ответ №1:
Скрипт содержит очень старый код обнаружения браузера, это может привести к его сбою в «более новых» браузерах с более строгим DOCTYPE.
Попробуйте удалить ‘language=»JavaScript1.2″‘ в теге script. Если это не сработает, вам придется переписать определение браузера.
Сам скрипт не очень сложный, хотя, возможно, вы могли бы найти части в другом месте и объединить их. Вам нужно сделать две вещи:
- Скрыть курсор (что делается с помощью CSS)
- Выберите положение мыши и поместите туда свой собственный курсор (обычно это изображение). Для этого вам понадобится скрипт, который извлекает положение мыши.
Не должно быть слишком сложно 🙂
Комментарии:
1.
language
Атрибут ничего не делает, он устарел и используется браузерами только в качестве последнего средства для определения типа скрипта (если он не предполагает, что JavaScript используется по умолчанию (что в наши дни встречается очень редко), иtype
атрибута нет); вы не можете изменить поведение движка JavaScript, используя этот старый, устаревший атрибут. Более того, в современных браузерах вы можете стилизовать изображение курсора с помощью CSS; не то чтобы мне это нравилось, но это возможно.2. язык устарел, а тип, безусловно, необходим (проверьте W3C).
3. Не в последней спецификации , где он был установлен по умолчанию
text/javascript
, потому что все браузеры принимали этот тип, когда он не был указан.